关于AES和DES加密中用到的模式以及填充方式相关,参考
https://www.jianshu.com/p/7c5b4a3c2c30
本文只介绍NoPadding java相关实现(kotlin,其实和java一样= =)
首先需要知道如下两点:
1、AES的NoPadding模式加密的key和data的byte字节数必须为16的倍数
2、DES的NoPadding模式加密的key的字节数必须是8位,data的字节数必须是8的倍数
AES/ECB/NoPadding实现:
private fun aesTest() {
val transformation = "AES/ECB/NoPadding"
val charset = Charset.forName("utf-8")
val pwd = "123456789012345678901234"
val content = "AES"
val enc = aesEncrypt(pwd, content, charset, transformation)
log("encrypt=$enc")
enc ?: return
val dec = aesDecrypt(pwd, enc, charset, transformation)
log("decrypt=$dec")
}
//key的字节数必须是16的倍数
private fun fillAESZeroPadding(pwd : String, charset: Charset): ByteArray{
val password = pwd.toByteArray(charset)
val factor = 16//计算因子
val size = password.size//传入的数据大小
val offset = size % factor//数据偏移量
if(offset == 0) return password
val realSize = size + (f