我是密码学的新手。 我希望学习如何在文件中加密和解密文本...当我在net中引用相关文章时。 我怀疑对同一文本进行多次加密后,单个文本的加密文本是否相同? 谁能解决我的疑问?
如何在Java中加密字符串的可能重复项
rgagnon.com/javadetails/java-0400.html
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) {
}
Pratik,get实例中的DES是什么?
@ user775:javax.crypto.KeyGenerator类的方法getInstance(String algorithm),返回该算法的javax.crypto.KeyGenerator对象。 还有一个java.security.Key,它是有效的DES算法加密密钥。
什么是byte [] enc = ecipher.doFinal(utf8);
什么是byte [] utf8 = dcipher.doFinal(dec)?
密码和密码似乎是javax.crypto.Cipher的实例:docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.html
密码和密码应该具有什么价值? 至少可以解释一下它的麻烦,
Downvote。 您没有定义ecipher和dcipher。
这个答案还不清楚。 请告诉我们需要导入哪些类。 还添加一个完全正常的代码。
I had a doubt that whether the
encrypted text will be same for single
text when encryption done by multiple
times on a same text??
这在很大程度上取决于您使用的加密算法:
某些(大多数)(成熟)算法的目标是,加密两次后,加密的文本会有所不同。这样做的一个原因是,攻击者无法充分了解纯文本和加密文本,因此无法计算密钥。
基于以下事实的其他算法(主要是一种方式的哈希加密算法),例如MD5或SHA,基于以下事实:对于每个加密/哈希,哈希文本都是相同的。
当使用相同的密钥加密纯文本时,加密的是否相同取决于算法和协议。在密码学中,有初始化向量IV:http://en.wikipedia.org/wiki/Initialization_vector与各种密码一起使用,使得使用相同密钥加密的同一纯文本给出了多种密码文本。
我建议您阅读更多有关Wikipedia,Bruce Schneier http://www.schneier.com/books.html和David Hook撰写的"使用Java进行密码学"上的密码学的信息。最后一本书充满了http://www.bouncycastle.org库的用法示例。
如果您对密码学感兴趣,可以使用CrypTool:http://www.cryptool.org/ CrypTool是一种免费的开源电子学习应用程序,在全世界范围内用于加密算法的实现和分析。
先生,非常感谢您的答复和指导,先生。