在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是一个免费的开源电子学习应用程序,在全球范围内用于加密算法的实现和分析 。
- 在文件系统上直接使用PEM编码CA证书进行HTTPS请求?
- 进度弹簧的固定速率和固定延迟有什么不同?
- Java 6 Source向后兼容性和SQL
- ibatis spring java.lang.NoSuchMethodError com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse
- 为什么我的TreeSet不会添加除第一个元素之外的任何内容?
- 如何使用modelAttribute在ajax(jquery)中提交spring表单
- Weblogic 10.3.1.0正在使用com.bea.core.apache.commons.net_1.0.0.0_1-4-1.jar …我想从我的代码中使用commons-net-2.0.jar
- Java – 特定日期的执行方法
- Java EJB JNDI Bean查找失败