【发布时间】:2017-07-16 21:00:01
【问题描述】:
在我的项目中,一个文本文件被选中并被加密。加密的文本与密钥一样单独保存。现在我尝试创建一个程序,该程序在正确的密钥文件可用时解密文件。我认为解密程序需要看起来很像DECRYPT_MODE 中的加密程序。当我读入密钥时,我不知道如何进行下一步来解密文本文件。也许任何人都可以帮助我如何使用 .txt 文件中的密钥并使用它来解密编码文件。
加密程序:
public class encrypt {
public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IOException {
//Key is created and saved in File
KeyGenerator keygenerator = KeyGenerator.getInstance("AES");
SecretKey myDesKey = keygenerator.generateKey();
String encodedKey = Base64.getEncoder().encodeToString(myDesKey.getEncoded());
Path keypath = Paths.get("C:/xxx/key.txt");
Path keyfile = Files.createFile(keypath);
Files.write(keyfile, encodedKey.getBytes(), StandardOpenOption.WRITE);
Cipher desalgCipher;
desalgCipher = Cipher.getInstance("AES");
desalgCipher.init(Cipher.ENCRYPT_MODE, myDesKey);
Path target = Paths.get("C:/xxx/encrypted.txt");
Path file = Files.createFile(target);
Path path = Paths.get("test.txt");
try(InputStream is = Files.newInputStream(path);
CipherInputStream cipherIS = new CipherInputStream(is, desalgCipher);
BufferedReader reader = new BufferedReader(new InputStreamReader(cipherIS));){
String line;
while((line = reader.readLine()) != null){
System.out.println(line);
Files.write(file, line.getBytes(), StandardOpenOption.WRITE);
}
}
}
}
解密:读入密钥并解密
public class decrypt {
public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IOException {
try {
File fileDir = new File("C:/Users/JT/Desktop/key.txt");
BufferedReader in = new BufferedReader(
new InputStreamReader(new FileInputStream(fileDir), "UTF-8"));
String str;
while ((str = in.readLine()) != null) {
System.out.println(str);
}
in.close();
}
catch (UnsupportedEncodingException e)
{
System.out.println(e.getMessage());
}
catch (IOException e)
{
System.out.println(e.getMessage());
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
byte[] decodedKey = Base64.getDecoder().decode(sb.toString());
SecretKey originalKey = new SecretKeySpec(decodedKey, 0, decodedKey.length, "AES");
SecretKeySpec key = new SecretKeySpec(sb.toString().getBytes(), "Base64");
Cipher desalgCipher;
desalgCipher = Cipher.getInstance("AES");
desalgCipher.init(Cipher.DECRYPT_MODE, key);
Path path = Paths.get("encrypted.txt"); // path to your file
try(InputStream is = Files.newInputStream(path); // get an IS on your file
CipherInputStream cipherIS = new CipherInputStream(is, desalgCipher); // wraps stream using cipher
BufferedReader reader = new BufferedReader(new InputStreamReader(cipherIS));){ // init reader.
String line;
while((line = reader.readLine()) != null){
System.out.println(line);
}
}
}
}
【问题讨论】:
-
您实际上应该首先尝试编写解密代码。除非您复制并粘贴加密代码。在这种情况下,这是一个代码请求并且是题外话。不要复制和粘贴安全关键代码。
-
好的,感谢您的建议,但它对我如何处理密钥没有帮助?
-
呃……是的,我知道。您还没有尝试编写解密代码?
-
我编辑了解密部分。读入密钥并选择应解密的文件。但是由于某些原因,我收到了
Wrong algorithm: AES or Rinjndael required的错误。你知道如何避免吗? -
你知道base64不是加密算法吧?您无法创建 base64“密钥”,因为没有这样的东西。
标签: java encryption cryptography base64