安卓支持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)}")
            }

        }
    }

喜欢的老哥记得点赞!

猜你喜欢

转载自blog.csdn.net/xiexiaotian11/article/details/106790599
今日推荐