JAVA 和ANDROID AES加密

JAVA 和ANDROID AES加密,第1张

概述 最近项目 服务端使用的是PHP的openssl的AES加密,Android使用openssl要用到JNI, 比较麻烦。 其实java也有自己AES加密, 效果跟openssl的AES加密一样的。 需要的第三方jar包bcprovjava:packagecom.qiang.kotlin;importjavax.crypto.Cipher;importjavax.crypto.sp

 最近项目 服务端使用的是PHP的openssl的AES加密,AndroID使用openssl要用到JNI, 比较麻烦。 其实java也有自己AES加密, 效果跟openssl的AES加密一样的 。 需要的第三方jar包 bcprov

java:

package com.qiang.kotlin;import javax.crypto.Cipher;import javax.crypto.spec.IvParameterSpec;import javax.crypto.spec.SecretKeySpec;import java.security.AlgorithmParameters;import java.security.Key;import java.security.SecureRandom;import java.security.Security;import java.util.Base64;import java.util.Random;public class Demo2 {    public static voID main(String[] args) throws Exception {        String str =  encrypt("888888","1111400887638100","2222400887638100");        System.out.println(str);;    }    /***     *     * @param data     * @param sessionKey key 必须16位     * @param iv  偏移值必须16位     * @return     * @throws Exception     */    public static String encrypt(String data,String sessionKey,String iv) throws Exception {        byte[] dataByte = data.getBytes();        byte[] keyByte = sessionKey.getBytes();        System.out.println("keyByte.length = "+keyByte.length);        byte[] ivByte = iv.getBytes();        System.out.println("ivByte.length = "+ivByte.length);        String encryptedData = null;        Security.addProvIDer(new org.bouncycastle.jce.provIDer.BouncyCastleProvIDer());        //指定算法,模式,填充方式,创建一个Cipher        Cipher cipher =Cipher.getInstance("AES/CBC/PKCS7padding");        //生成Key对象        Key sKeySpec = new SecretKeySpec(keyByte, "AES");        //把向量初始化到算法参数        AlgorithmParameters params = AlgorithmParameters.getInstance("AES");        params.init(new IvParameterSpec(ivByte));        //指定用途,密钥,参数 初始化Cipher对象        cipher.init(Cipher.ENCRYPT_MODE, sKeySpec, params);        //指定加密        byte[] result = cipher.doFinal(dataByte);        //对结果进行Base64编码,否则会得到一串乱码,不便于后续 *** 作        Base64.Encoder encoder = Base64.getEncoder();        encryptedData = encoder.encodetoString(result);        return encryptedData;    }}

androID 用kotlin实现  由于Base64 androID o 才能 使用androID.util.Base64 

import java.security.AlgorithmParametersimport javax.crypto.Cipherimport javax.crypto.spec.IvParameterSpecimport javax.crypto.spec.SecretKeySpecimport java.security.Securityimport androID.util.Base64import com.dcit.dcsdk.ext.logdobject AesUtils {    //密钥    val KEY = "Dcit400887638100"    //偏移量    val IV = "Dcit400887638100"    @Throws(Exception::class)    fun encrypt(psd: String): String {        val dataByte = psd.toByteArray()        val keyByte = KEY.toByteArray()        val ivByte = IV.toByteArray()        Security.addProvIDer(org.bouncycastle.jce.provIDer.BouncyCastleProvIDer())        //指定算法,模式,填充方式,创建一个Cipher        val cipher = Cipher.getInstance("AES/CBC/PKCS7padding")        //生成Key对象        val sKeySpec = SecretKeySpec(keyByte, "AES")        //把向量初始化到算法参数        val params = AlgorithmParameters.getInstance("AES")        params.init(IvParameterSpec(ivByte))        //指定用途,密钥,参数 初始化Cipher对象        cipher.init(Cipher.ENCRYPT_MODE, sKeySpec, params)        //指定加密        val bytes = cipher.doFinal(dataByte)        val result = String(Base64.decode(bytes, Base64.DEFAulT))        logd("encrypt resultStr = $result ")        return  result    }}

 

总结

以上是内存溢出为你收集整理的JAVA 和ANDROID AES加密全部内容,希望文章能够帮你解决JAVA 和ANDROID AES加密所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1104918.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存