
最近项目 服务端使用的是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加密所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)