第一步,網上大部分都是讓你 覆蓋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)}")
}
}
}
喜歡的老哥記得點贊!