几天来,我一直试图用java解密一个用OpenSSL加密的消息。使用以下命令对邮件进行了加密:
openssl enc-e-aes-256-cbc-kfile$file.key-in toto-out toto.enc。
文件file.key包含256位的对称密钥。命令中没有指定salt,但文件以salted__开头。下面是我编写的类,试图解密文件,但即使删除文件的16个字符也无法得到任何东西,即:Salted__+salt encrypted。我明白openssl是在默认情况下做到这一点的。当我试图破译时,会抛出一个与加密文本有关的异常。
有人能帮帮我吗?一条轨道?一个主意?
public class Java {
private static SecretKey key = null;
private static Cipher cipher = null;
public static void main(String[] args) throws Exception
{
String filename = RESOURCES_DIR + "toto.enc";
byte[] key = Base64.decode("2AxIw+/AzDBj83OILV9GDpOs+izDFJEhD6pve/IPsN9=");
SecretKeySpec secretKey = new SecretKeySpec(key, "AES");
cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] test = Base64.decode(readFile(filename));
byte[] decryptedBytes = cipher.doFinal(test);
String decryptedText = new String(decryptedBytes, "UTF8");
System.out.println("After decryption: " + decryptedText);
}
public final static String RESOURCES_DIR = "C:/Users/toto/Desktop/";
static String readFile(String filename) throws FileNotFoundException, IOException {
FileReader fr;
BufferedReader br;
fr = new FileReader(new File(filename));
br = new BufferedReader(fr);
String str;
String res = "";
while ((str = br.readLine()) != null) {
res += str;
}
return res;
}
}
错误:
Exception in thread "main" javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:811)
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:676)
at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:313)
at javax.crypto.Cipher.doFinal(Cipher.java:2131)
at deciphertodeploytest6.Java.main(Java.java:52)
不,File.Key不包含密钥。OpenSSL enc-kfile
读取一个口令,该口令不是密钥,但用于派生密钥和IV(如果适用,它就在这里);查看手册页。默认情况下,这个键派生使用随机salt,自2016-08年以来,默认哈希依赖于您没有说明的OpenSSL版本。另外,Java中的cipher.getInstance(“aes”)
默认为ECB,而不是CBC。(它还默认为'pkcs5'填充,这与OpenSSL匹配,尽管从技术上讲,它应该被称为PKCS7,而不是pkcs5。)
要在Java中匹配OpenSSL enc
所使用的PBKDF(以及key和IV),可以使用BouncyCastle或与OpenSSL的EVP_Bytestokey
等效的代码;请参见dupe或近dupe QS:
OpenSSL AES CBC加密的Java等效项
如何使用Java解码使用OpenSSL aes-128-cbc编码的字符串?
如何使用'-nosalt'param解密AES加密文件
如何使用AES解密使用OpenSSL命令加密的Java文件?
以及我对规范https://crypto.stackexchange.com/questions/3298/is-there-a-standard-for-openssl-interoperable-aes-encryption/#35614的尝试
本文向大家介绍Java实现文件的加密解密功能示例,包括了Java实现文件的加密解密功能示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java实现文件的加密解密功能分享给大家供大家参考,具体如下: PS:关于加密解密感兴趣的朋友还可以参考本站在线工具: 文字在线加密解密工具(包含AES、DES、RC4等): http://tools.jb51.net/password/txt_enco
本文向大家介绍android中对文件加密解密的实现,包括了android中对文件加密解密的实现的使用技巧和注意事项,需要的朋友参考一下 现在项目里面有一个需求,本项目里面下载的视频和文档都不允许通过其他的播放器播放,在培训机构里面这样的需求很多。防止有人交一份钱,把所有的课件就拷给了别人。这样的事情培训机构肯定是不愿意的。现在我项目里面也出了这么个需求。下面介绍一下我的实现。 文件加解密的流程及原
本文向大家介绍Java上传下载文件并实现加密解密,包括了Java上传下载文件并实现加密解密的使用技巧和注意事项,需要的朋友参考一下 使用 Jersey 服务器实现上传,使用 HTTP 请求实现下载 引入依赖 在 pom.xml 中添加 Jersey 相关依赖 创建工具类 测试上传 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
我正在做一个简单的程序来加密/解密使用RSA算法在Java。我创建一个密码对象如下: 我通过调用加密函数进行加密: 解密过程如下: 但是,当我将创建密码对象的代码编辑为://Create a Cipher object Cipher rsapier=Cipher时。getInstance(“RSA”); 问题出在哪里。在第一种情况下(当空格出现时),我指定了NoPadd?为什么空格出现在解密的消息
本文向大家介绍java 实现DES 加密解密的示例,包括了java 实现DES 加密解密的示例的使用技巧和注意事项,需要的朋友参考一下 以上就是java 实现DES 加密解密的示例代码的详细内容,更多关于java des加密解密的资料请关注呐喊教程其它相关文章!
问题内容: 我想用Java加密和解密文件,我已经阅读了这个URL http://www- users.york.ac.uk/~mal503/lore/pkencryption.htm ,我得到了两个文件,即公共安全证书和私有安全证书文件和private.pem文件,我将这些文件复制并粘贴到当前目录中,并按如下所示编写Java代码,当我运行此文件时,未执行任何加密或解密操作,请查看并告诉我我哪里出了