加密代码段,我不明白

时间:2009-12-16 08:51:41

标签: java encryption aes

我正在阅读有关加密的内容,并且很难理解加密程序的这3个Java语句。

    cipher = Cipher.getInstance("AES");

    cipher.init(Cipher.ENCRYPT_MODE, skeySpec);

    encrypted = cipher.doFinal(str.getBytes())

有人可以帮忙吗?

2 个答案:

答案 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的副本 - 这是我学会理解这些东西的地方。