安卓支持AES 256加密解密

第一步,網上大部分都是讓你  覆蓋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)}")
            }

        }
    }

喜歡的老哥記得點贊!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章