在java中加密和解密String

我是密码学的新手。 我希望学习如何加密和解密文件中的文本……当我在网上查阅相关文章时。 我怀疑在同一文本上多次加密时加密文本对于单个文本是否相同? 有人可以清楚我的怀疑吗?

public String encrypt(String str) { try { // Encode the string into bytes using utf-8 byte[] utf8 = str.getBytes("UTF8"); // Encrypt byte[] enc = ecipher.doFinal(utf8); // Encode bytes to base64 to get a string return new sun.misc.BASE64Encoder().encode(enc); } catch (javax.crypto.BadPaddingException e) { } catch (IllegalBlockSizeException e) { } catch (UnsupportedEncodingException e) { } catch (java.io.IOException e) { } return null; } public String decrypt(String str) { try { // Decode base64 to get bytes byte[] dec = new sun.misc.BASE64Decoder().decodeBuffer(str); // Decrypt byte[] utf8 = dcipher.doFinal(dec); // Decode using utf-8 return new String(utf8, "UTF8"); } catch (javax.crypto.BadPaddingException e) { } catch (IllegalBlockSizeException e) { } catch (UnsupportedEncodingException e) { } catch (java.io.IOException e) { } return null; } } 

这是一个使用该类的示例:

 try { // Generate a temporary key. In practice, you would save this key. // See also Encrypting with DES Using a Pass Phrase. SecretKey key = KeyGenerator.getInstance("DES").generateKey(); // Create encrypter/decrypter class DesEncrypter encrypter = new DesEncrypter(key); // Encrypt String encrypted = encrypter.encrypt("Don't tell anybody!"); // Decrypt String decrypted = encrypter.decrypt(encrypted); } catch (Exception e) { } 

我怀疑在同一文本上多次加密时加密文本对于单个文本是否相同?

这很大程度上取决于您使用的加密算法:

  • 某些/大多数(成熟)算法的一个目标是加密文本在加密两次时不同。 这样做的一个原因是,攻击者如何知道普通文本和加密文本无法计算密钥。
  • 其他算法(主要是单向加密散列),如MD5或SHA,基于这样的事实,散列文本对于每个加密/散列是相同的。

当使用相同密钥加密纯文本时加密是否相同取决于算法和协议。 在密码学中有初始化向量IV:与各种密码一起使用的http://en.wikipedia.org/wiki/Initialization_vector使得用相同密钥加密的相同纯文本给出了各种密文。

我建议你在维基百科,Bruce Schneier http://www.schneier.com/books.html和David Hook的“Beginning Cryptography with Java”上阅读更多关于加密的内容。 最后一本书充满了使用http://www.bouncycastle.org库的例子。

如果您对加密感兴趣,可以使用CrypTool: http: //www.cryptool.org/ CrypTool是一个免费的开源电子学习应用程序,在全球范围内用于加密算法的实现和分析