linux在内存解密,java - 3DES加密/解密在Windows中工作,在Linux中抛出IllegalBlockSizeException - 堆栈内存溢出...

我最近尝试将Flex / Java软件解决方案从Windows迁移到Linux(CentOS6 64位),我遇到了这个问题。

简单地说,我正在加密Flex / ActionScript中的短文本(使用com.hurlant库),算法是带有ECB和PKCS5Padding的TripleDES。 服务器是JBoss 5.1.0GA。

然后将此加密文本发送到JMS目标。

在JMS的接收端有一个简单的Java应用程序(使用BouncyCastle)尝试解密文本。

所有这些都像Windows上的魅力。 在Linux上我得到这个:

javax.crypto.IllegalBlockSizeException: last block incomplete in decryption

at org.bouncycastle.jce.provider.JCEBlockCipher.engineDoFinal(Unknown Source)

at javax.crypto.Cipher.doFinal(DashoA13*..)

我在Java应用程序(以Base64编码)接收时记录了加密文本,在Linux和Windows上都是相同的。 关键显然是一样的。

我相信它可能是一个字符集编码问题,但即使用-Dfile.encoding = UTF8或-Dfile.encoding = windows-1252选项启动JBoss和Java应用程序也不起作用。

以下是用于加密的代码(ActionScript):

var keyData:ByteArray = Hex.toArray(Hex.fromString("jgd8f3m8ybjhwlGhr4hihbp0"));

var pinData:ByteArray = Hex.toArray(Hex.fromString("12341234"));

var pad:IPad = new PKCS5;

var mode:ICipher = Crypto.getCipher("simple-3des-ecb", keyData, pad);

pad.setBlockSize(mode.getBlockSize());

mode.encrypt(pinData);

var message:IMessage = new AsyncMessage();

message.body = Base64.encodeByteArray(pinData);

以下是用于解密的代码(Java):

String userPin3DESEncrypted = new String(Base64.decodeBase64(userPin3DESBase64Encrypted.getBytes()));

byte [] keyByte = "jgd8f3m8ybjhwlGhr4hihbp0".getBytes();

SecretKeySpec secretKeySpec = new SecretKeySpec(keyByte, "DESEDE");

Cipher cipher = Cipher.getInstance("DESEDE/ECB/PKCS5Padding");

cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);

String userPinDecrypted = new String(cipher.doFinal(userPin3DESEncrypted.getBytes()));

如前所述,在Linux和Windows上, userPin3DESBase64Encrypted的内容是相同的(相同的Base64字符串),所以问题不应该在Flex / JBoss方面......

有任何想法吗?

提前感谢所有想要在桌面上敲击的人,因为我已经多次做过......

干杯

卢卡

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值