我正在阅读有关加密的内容,并且很难理解加密程序的这3个Java语句。
cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
encrypted = cipher.doFinal(str.getBytes())
有人可以帮忙吗?
答案 0 :(得分:2)
简单来说,
- 使用AES算法创建新的加密设备;
- 准备好了
- 获取字符串
str
的字节并加密它们;将结果返回到encrypted
对象,无论是什么。
你究竟是什么不明白?
答案 1 :(得分:1)
cipher = Cipher.getInstance("AES");
使用Cipher object算法获取可以加密/解密的AES。 Java的加密代码有点奇怪 - 您通常使用带有String参数的 getInstance 调用,而不是直接创建对象。 (请注意,“密码”表示“加密某些内容的方式”。)
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
Tell您希望对某些内容进行加密的密码(Cipher.ENCRYPT_MODE),并为其提供加密key skeyspec 。
encrypted = cipher.doFinal(str.getBytes())
密码的工作方式是使用 update 方法为它们提供大量字节数据,这会导致密码在其自身内累积加密数据。对于最后的数据块,使用 doFinal ,它告诉密码加密过程已完成。需要一种不同的方法,因为密码通常必须填充返回到特定长度的数据。 doFinal 然后返回加密信息的最后一位。
但是,如果只有一个随时可用的数据块,您只需调用 doFinal ,它将立即为您提供所有加密字节。但这解释了为什么该方法被称为 doFinal ,而不是“ process ”。
总而言之,上面的代码创建了一个AES加密引擎,为它提供了一个加密密钥,然后使用它将String str 加密到字节数组 encrypted 中。
请注意,加密是一项非常棘手的业务,很容易出错。你需要警告的各种各样的东西,我没有触及,因为我的手腕现在受伤了。所以我强烈建议你得到Beginning Cryptography with Java的副本 - 这是我学会理解这些东西的地方。