算法/工作模式、填充模式
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加密
AES和DES是用一样,就不在列举 AES加密算法
转发表明出处
点击下载demo
android互助群