2016-08-22 46 views
2

我对java或openssl中的文件的加密不太熟悉。我知道学校的基本知识,但从未真正实施过。相当于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加密标准而变得很难。我希望有一个包含所有必需功能的库。如果有的话,任何人都可以指向正确的方向?我正在阅读有关充气城堡的加密库,但没有多少运气找到我需要的东西。

亲切的问候

+0

'javax.crypto'。 – Kayaman

+1

这是3个问题,而不是1.它似乎是一个图书馆的请求,这是脱离主题。 – Raedwald

+1

另请参阅[正确使用Java SecureRandom](http://www.cigital.com/blog/proper-use-of-javas-securerandom/)。 – jww

回答

1

随机字节数组的代码是好的,但为什么Base64编码的随机字节,这是真的只为在那里只需要ASCII charactrers或者用显示neccessary。

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

使用SecureRandom来创建iv并将其加入到加密数据中,它不需要是保密的。解密只需从数据中选择iv用于iv。