第一步,网上大部分都是让你 覆盖2个jar ,我弄了,但是没看出效果
我是java1.8版本的,下载地址是:
https://www.oracle.com/java/technologies/javase-jce8-downloads.html
覆盖到安装jdk的目录
C:\Program Files\Java\jdk1.8.0_251\jre\lib\security\policy\unlimited
C:\Program Files\Java\jdk1.8.0_251\jre\lib\security\policy\limited
覆盖jre
C:\Program Files\Java\jre1.8.0_251\lib\security\policy\limited
C:\Program Files\Java\jre1.8.0_251\lib\security\policy\unlimited
如果你这样覆盖完了就成功了就不要往下看了
第二步,android studio 的project structure 必须指定这个jdk,因为android studio 默认安装的时候有一个比较老的jdk
这个必须改对。
第三步,下载一个支持256位加密的jar文件
https://www.bouncycastle.org/latest_releases.html
然后加到项目中
加密之前写入:
Security.addProvider( org.bouncycastle.jce.provider.BouncyCastleProvider())
这样就可以愉快的玩 AES/CBC/PKCS7Padding
下面是AES类
class AES {
//key的内容
var key :String="09876543210987650000000000000000"
//iv的内容
var cKey:String="1234567890123456"
fun decrypt(content: ByteArray):ByteArray?{
Security.addProvider( org.bouncycastle.jce.provider.BouncyCastleProvider())
val keyGenerator = KeyGenerator.getInstance("AES")
keyGenerator.init(256)
val cipher=Cipher.getInstance("AES/CBC/PKCS7Padding")
val keySpec = SecretKeySpec(key.toByteArray(),"AES")
val iv = IvParameterSpec(cKey.toByteArray())
cipher.init(Cipher.DECRYPT_MODE,keySpec,iv)
return cipher.doFinal(content)
}
fun encrypt(content:String):ByteArray?{
Security.addProvider( org.bouncycastle.jce.provider.BouncyCastleProvider())
val cipher = Cipher.getInstance("AES/CBC/PKCS7Padding")
val raw = key.toByteArray(Charsets.UTF_8)
val sKeySpec = SecretKeySpec(raw, "AES")
val iv = IvParameterSpec(cKey.toByteArray())
cipher.init(Cipher.ENCRYPT_MODE, sKeySpec, iv)
val result = cipher.doFinal(content.toByteArray())
return result
}
}
切记 如果你要256加密 必须是32位的key,否则和服务器联调的时候就会出现对不上的情况。
如果是128位加密,可以用16位的key。
测试代码
@Test
fun test(){
val aes= AES()
val content = "my new AES Tool!"
val result =aes.encrypt(content)
result?.let {
println()
println("encrypt:${Base64.getEncoder().encodeToString(result)}")
val decypt = aes.decrypt(result)
decypt?.let {
println("decypt:${String(decypt, Charsets.UTF_8)}")
}
}
}
喜欢的老哥记得点赞!