0
我在理解java和python的三重Des算法之間的概念時遇到了問題。在java中,加密的密鑰長度爲48個字符,而在python的情況下,不能應用相同的密鑰。我嘗試了兩種建議here,但它似乎無法用任何方式工作。我無法解密在python中由java加密的字符串。在Java代碼如下所示:Java中的DESede和python中的3des
import java.security.spec.KeySpec;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESedeKeySpec;
public class SecretKeyEncryptionExample
{
private static final String FORMAT = "ISO-8859-1";
public static final String DESEDE_ENCRYPTION_SCHEME = "DESede";
private KeySpec ks;
private SecretKeyFactory skf;
private Cipher cipher;
SecretKey key;
public SecretKeyEncryptionExample()
throws Exception
{
String myEncryptionKey = "<48 chars long string>";
this.ks = new DESedeKeySpec(myEncryptionKey.getBytes("ISO-8859-1"));
this.skf = SecretKeyFactory.getInstance("DESede");
this.cipher = Cipher.getInstance("DESede");
this.key = this.skf.generateSecret(this.ks);
}
而在蟒蛇,如果我使用:
from pyDes import *
import hashlib
import base64
key1 = "<48 chars long key>".decode('hex')
data = "<Some encrypted strings>"
k = triple_des(key1, ECB, "\0\0\0\0\0\0\0\0", pad=None, padmode=PAD_PKCS5)
e = k.decrypt(data)
print e
我根據給定here但不打印輸出的第一個建議做到了。我再次試圖在同一頁面第二個建議,其中要求使用前24個字符作爲重點,而忽略休息爲:
from pyDes import *
import hashlib
import base64
key1 = "<taking only first 24 chars long key>"
data = "<Some encrypted data>"
k = triple_des(key1, ECB, "\0\0\0\0\0\0\0\0", pad=None, padmode=PAD_PKCS5)
e = k.decrypt(data)
print e
但是,這也給了我沒有輸出。我很困惑與所有這些研究。請建議哪種方式是正確的,以及爲什麼我沒有從這兩種方法中獲得任何輸出。謝謝..
你的答案是非常helpful.It解決的問題。告訴我一件事,如果我使用getInstance(「DESede」)只有默認情況下java會採用哪種模式。 – Tirthajust4u
@ Tirthajust4u Oracle提供程序傾向於默認使用ECB模式和PKCS#5填充。不確定其他提供者。因此爲什麼總是建議明確。 –