0
点赞
收藏
分享

微信扫一扫

安卓支持AES 256加密解密

Star英 2023-03-17 阅读 87


第一步,网上大部分都是让你  覆盖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​​

我下载了​​bcprov-jdk15to18-165.jar​​

然后加到项目中

加密之前写入:

   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)}")
}

}
}

喜欢的老哥记得点赞!

 

举报

相关推荐

0 条评论