我要用python对接一个java的接口,然而对方是用java的3des加密的方法
我试过好几种方法,都没达到符合要求的加密方式。python的pycrypto中的DES3或者pyDes的triple_des都没有PKCS7这种加密方式。
有人做过这些吗?求指点。
附上我的代码,运算出来的并不正确。
from pyDes import *
import pyDes
def toHex(txt):
return ''.join(["%02x" % x for x in txt]).strip()
data = "1234567890123456789"
k = triple_des(b"test12345678901234000000", ECB, pad=None, padmode=PAD_PKCS5)
d = k.encrypt(data)
print ("Encrypted: %r" % d)
print(toHex(d))
下面是java的关键部分代码,我不太明白DESede在加密中的作用
private static byte[] des3Encryption(byte[] key, byte[] data) throws
NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException,
BadPaddingException, IllegalBlockSizeException, IllegalStateException {
final String Algorithm = "DESede";
if(key.length != 24){
throw new RuntimeException("Invalid DESede key length (must be 24 bytes)");
}
SecretKey deskey = new SecretKeySpec(key, Algorithm);
Cipher c1 = Cipher.getInstance(Algorithm);
c1.init(Cipher.ENCRYPT_MODE, deskey);
return c1.doFinal(data);
}
看来你是误解了这一句:
这个0指的是ASCII码值0 ,'\0'
改动后:
输出:
另外: PKCS#5 可以说是 PKCS#7的一个子集。 前者是针对8字节块padding,后者把padding的块大小放宽到255字节