java - 相当于java中的OpenSSL命令

标签 java encryption openssl bouncycastle public-key-encryption

就此而言,我不太熟悉 java 或 openssl 中的文件加密。我了解学校的基础知识,但从未真正实现过。

现在我得到了以下 3 个命令:

//generate random base64 private key
openssl rand -base64 32 -out (keypath)
//Encrypt random key with public key
openssl rsautl -encrypt -inkey (encryptionkey) -pubin -in (input) -out (output)
//encrypt file
openssl enc -aes-256-cbc -salt -in (input) -out (output) -pass file:(keypath)

我需要在 java 中完全复制它。有没有简单的方法可以做到这一点? 有没有我可以使用的库使这更容易?

对于第一行,我使用 java 7 中的 SecureRandom 函数生成一个字节数组,然后我使用 apache commons 编解码器库将其加到 base64 中。像这样:

byte[] bytes = new byte[32];
new SecureRandom().nextBytes(bytes);
String test = new String(Base64.encodeBase64(bytes));
test = test.substring(0, Math.min(test.length(), 10));

如果我没记错的话,这应该做同样的事情。

对于第二个,我需要使用提供的公共(public) RSA key 加密包含上述脚本输出的文件。加密文件或文件中的数据之间有区别吗?实际文件是否添加位意味着什么?

然而,第三个是它变得困难的地方,因为它需要盐和 aes-256-cbc 加密标准。我希望有一个包含所有所需功能的库。如果是这样,谁能指出我正确的方向?我正在阅读有关充气城堡的加密库的信息,但没有找到我需要的东西。

亲切的问候

最佳答案

随机字节数组代码很好,但为什么 Base64 对随机字节进行编码,这实际上只需要用于显示可能只需要 ASCII 字符的地方。

对于 AES 加密,请参阅 javax.crypto 的 Java 文档.

使用 SecureRandom 创建 iv 并将其添加到加密数据之前,它不需要是 secret 的。解密时只需从数据中选择 iv 以用于 iv。

关于java - 相当于java中的OpenSSL命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39084741/

相关文章:

ios - 以编程方式在 iOS App 中生成 SSL 证书

c - makefile 总是调用最后一个目标

java - ObjectMapper - 读/写通用对象

Java将列表转换为集合的映射

ios - 在我的代码中写入 RSA 私钥是否安全

ruby - 使用 AES 的 Rails 加密,过于复杂

c - 基于PBKDF的AES key 的强度

java - 有效的 Java - 永远不要依赖终结器来更新关键的持久状态

java - 你在 POJO 中编写 Hibernate 代码吗?

C 程序跳过 printf 和 scanf 语句