相当于java

时间:2016-08-22 16:45:38

标签: 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));

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

对于第二个,我需要使用提供的公共RSA密钥加密包含上述脚本输出的文件。加密文件或文件内的数据有区别吗?意思是实际文件添加位?

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

亲切的问候

1 个答案:

答案 0 :(得分:1)

随机字节数组代码很好但是为什么Base64会对随机字节进行编码,这对于显示可能只需要使用ASCII字符的情况来说是非常必要的。

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

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