您的位置:首页 > 其它

AES /DES 加密使用 CBC/ECB 工作模式

2018-01-03 18:41 567 查看
算法/工作模式、填充模式

AES  DES 是加密算法

CBC  ECB 是工作模式

后面的是 填充模式



加密的工作模式有



ECB、CBC、CFB、OFB

其中:CBC  和 ECB 比较常用

ECB   电子密码本模式:Electronic codebook  每块堵路加密 

优点:分块处理 并行处理

缺点:同样的原文得到相同的密文  容易被攻击

CBC 密码分组链接:Cipher-block
chaining  每块加密依赖前一块的密文

优点:同样的原文得到不同的密文  原文微下的改变影响后面全部密文

缺点:加密需要串行处理  误差传递

DES加密算法 /ECB工作模式

/**
* Created by wjs 2018/1/2
*/
object DES_ECB_Crypt {
//算法/工作模式/填充模式
val transformation = "DES/ECB/PKCS5Padding"
val algorithm = "DES"
//des加密
fun encrypt(input: String, password: String): String {
//1.创建cipher对象 学习查看api
val cipher = Cipher.getInstance(transformation)
//2.初始化cirpher(参数1:加密/解密模式)
val kf = SecretKeyFactory.getInstance(algorithm)
val keySpe = DESKeySpec(password.toByteArray())
val key: Key = kf.generateSecret(keySpe)
//加密模式
cipher.init(Cipher.ENCRYPT_MODE, key)
//3.加密/解密
val encrypt = cipher.doFinal(input.toByteArray())
//通过Base64解决乱码问题
return Base64.encode(encrypt)
}

//des解密
fun decrypt(input: String, password: String): String {
//1.创建cipher对象 学习查看api
val cipher = Cipher.getInstance(transformation)
//2.初始化cirpher(参数1:加密/解密模式)
val kf = SecretKeyFactory.getInstance(algorithm)
val keySpe = DESKeySpec(password.toByteArray())
val key: Key = kf.generateSecret(keySpe)
//解密模式
cipher.init(Cipher.DECRYPT_MODE, key)
//3.加密/解密
//val encrypt = cipher.doFinal(input.toByteArray())
//base64解码
val encrypt = cipher.doFinal(Base64.decode(input))
return String(encrypt)
}
}

测试

fun main(args: Array<String>) {
val input = "des ECB加密"
val password = "12345678"
val des = DES_ECB_Crypt.encrypt(input, password)
println(des)
val dec = DES_ECB_Crypt.decrypt(des, password)
println(dec)
}
结果
L8fOkESMpKToj/ILJCEskg==
des ECB加密

DES加密算法 /CBC工作模式
(init方法需要多一个参数)

/**
* Created by wjs 2018/1/2
*/
object DES_CBC_Crypt {
//算法/工作模式/填充模式
val transformation = "DES/CBC/PKCS5Padding"
val algorithm = "DES"
//des加密
fun encrypt(input: String, password: String): String {
//1.创建cipher对象 学习查看api
val cipher = Cipher.getInstance(transformation)
//2.初始化cirpher(参数1:加密/解密模式)
val kf = SecretKeyFactory.getInstance(algorithm)
val keySpe = DESKeySpec(password.toByteArray())
val key: Key = kf.generateSecret(keySpe)
//加密模式
val iv = IvParameterSpec(password.toByteArray())
cipher.init(Cipher.ENCRYPT_MODE, key,iv)//CBC需要更多参数
//3.加密/解密
val encrypt = cipher.doFinal(input.toByteArray())
//通过Base64解决乱码问题
return Base64.encode(encrypt)
}

//des解密
fun decrypt(input: String, password: String): String {
//1.创建cipher对象 学习查看api
val cipher = Cipher.getInstance(transformation)
//2.初始化cirpher(参数1:加密/解密模式)
val kf = SecretKeyFactory.getInstance(algorithm)
val keySpe = DESKeySpec(password.toByteArray())
val key: Key = kf.generateSecret(keySpe)
//解密模式
val iv = IvParameterSpec(password.toByteArray())
cipher.init(Cipher.DECRYPT_MODE, key,iv)
//3.加密/解密
//val encrypt = cipher.doFinal(input.toByteArray())
//base64解码
val encrypt = cipher.doFinal(Base64.decode(input))
return String(encrypt)
}
}

测试


fun main(args: Array<String>) {
val input = "des CBC加密"
val password = "12345678"
val des = DES_CBC_Crypt.encrypt(input, password)
println(des)
val dec = DES_CBC_Crypt.decrypt(des, password)
println(dec)
}


结果


ICIh7W5XOBHFX86b1PFhOg==

des CBC加密

base64工具类

AES和DES是用一样,就不在列举 AES加密算法

转发表明出处

点击下载demo

android互助群


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: