2
我有一個傳統的java的blowfish實現,我試圖移植到Python。Blowfish的Java和Python實現產生不同的結果
爪哇:
import blowfishj.*;
import org.apache.commons.codec.binary.Hex;
private static byte[] EncryptBlowFish(byte[] sStr, String sSecret) {
byte[] key = sSecret.getBytes();
byte[] cipher = new byte[sStr.length];
BlowfishECB blowfish = new BlowfishECB(key, 0, key.length);
blowfish.encrypt(sStr, 0, cipher, 0, sStr.length);
return (new String(Hex.encodeHex(cipher)));
}
的Python:
from Crypto.Cipher import Blowfish
import binascii
def encrypt(encr_str, key_str):
cipher = Blowfish.new(key_str, Blowfish.MODE_ECB)
return binascii.hexlify(cipher.encrypt(encr_str)).decode('utf-8')
如果待加密的字符串是 「12345678」,並且鍵是 「123456789」,Java代碼輸出 「e00723bbb58234aa」 和蟒代碼輸出「61d2570dc6e09632」。
由於java代碼是遺留的,我無法觸及它。 This表示pycrypto實施河豚時存在問題。不過,我可以確認接受的答案here作品。不知道爲什麼。我嘗試了pycrypto以及this blowfish module,結果相同。
任何想法如何在Python中複製與傳統Java代碼相同的blowfish輸出?
好像你的Java代碼使用河豚ECB模式,你檢查pyhon也在歐洲央行,而不是在CBC或其它模式下運行? –
我正在使用'cipher = Blowfish.new(key_str,Blowfish.MODE_ECB)'。那不是把蟒蛇放到ECB模式嗎? –
是的你的權利,經過一番嘲弄我自己,我認爲蟒蛇實際上產生河豚的正確結果。和java似乎是blowfish-compact –