openssl解密java_用Java解密openssl河豚

我有一个远程系统使用河豚加密向我发送经过openssl命令行程序加密的数据.

具体来说,正在运行的命令是:

openssl enc -blowfish -a -salt -in original.txt -out encrypted.txt -pass pass:secret

对于输入,这是一个测试.产生U2FsdGVkX19bSsC3dXTOYssoOK5L3THkhXgiB7X1Trv6SaVO2TGz0g ==

我正在尝试使用以下代码在Java的另一端解密此内容.

// requires commons-io and commons-codec

public void testDecryption() throws Exception {

File encryptedFile = new File("encrypted.txt");

String password = "secret";

byte[] base64EncryptedBytes = FileUtils.readFileToByteArray(encryptedFile);

byte[] encryptedBytes = new Base64().decode(base64EncryptedBytes);

SecretKeySpec blowfishKey = new SecretKeySpec(password.getBytes("ASCII"), "Blowfish");

Cipher blowfishCipher = Cipher.getInstance("Blowfish/ECB/NoPadding");

blowfishCipher.init(Cipher.DECRYPT_MODE, blowfishKey);

byte[] decryptedContent = blowfishCipher.doFinal(encryptedBytes);

System.out.println(new String(decryptedContent));

}

而不是当前产生的原始消息…

ê????M≥ O]?∞;Z

我究竟做错了什么?

一些可能的理论

> Blowfish / ECB / NoPadding不是要使用的正确密码实例.我尝试了http://docs.oracle.com/javase/1.4.2/docs/guide/security/jce/JCERefGuide.html#AppA列出的模式和填充的每种组合,但OAEPWith [digest] And [mgf] Padding padding失败.

>我已经注意到,如果我使用openssl enc -d -blowfish -a -incrypted.txt从命令行解密文件,则密码提示将标记为“ bf-cbc”,这表明是Blowfish / CBC而不是Blowfish / ECB ,但是如果我使用它,则会得到java.security.InvalidKeyException:参数缺少异常,但是我不确定我可以添加什么参数.

>应该以某种方式转换在命令行上给定的密码,否则getBytes(“ ASCII”)不正确.

>盐的Java代码中需要一些其他处理.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值