Python Blowfish Encryption

I struggle because of my incomplete knowledge of Java to convert this encryption code to Python code. These two results should have the same results. Help would be greatly appreciated.

Java function

import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import java.security.Key; class Main { public static void main (String[] args) throws java.lang.Exception { String s = "testings"; Cipher cipher = Cipher.getInstance("Blowfish/ECB/PKCS5Padding"); Key key = new SecretKeySpec("6#26FRL$ZWD".getBytes(), "Blowfish"); cipher.init(1, key); byte[] enc_bytes = cipher.doFinal(s.getBytes()); System.out.println(enc_bytes); } } 

Python equivalent

 def PKCS5Padding(string): byteNum = len(string) packingLength = 8 - byteNum % 8 if packingLength == 8: return string else: appendage = chr(packingLength) * packingLength return string + appendage def PandoraEncrypt(string): from Crypto.Cipher import Blowfish key = b'6#26FRL$ZWD' c1 = Blowfish.new(key, Blowfish.MODE_ECB) packedString = PKCS5Padding(string) return c1.encrypt(packedString) 

results

Java Function: "?? ΒΎΓ΄"

Python function: "Γ‹4A-ΒΎ` * Γ£"

+4
source share
2 answers

I get the same output for python and Java using your example.

Java:

 import java.math.BigInteger; import java.security.Key; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; public class Blowfish1 { public static void main(String[] args) throws Exception { String s = "testings"; Cipher cipher = Cipher.getInstance("Blowfish/ECB/PKCS5Padding"); Key key = new SecretKeySpec("6#26FRL$ZWD".getBytes(), "Blowfish"); cipher.init(Cipher.ENCRYPT_MODE, key); byte[] enc_bytes = cipher.doFinal(s.getBytes()); System.out.printf("%x%n", new BigInteger(1, enc_bytes)); } } 

Python:

 from Crypto.Cipher import Blowfish import binascii # See @falsetru answer for the following method # def PKCS5Padding(string): byteNum = len(string) packingLength = 8 - byteNum % 8 appendage = chr(packingLength) * packingLength return string + appendage def PandoraEncrypt(string): key = b'6#26FRL$ZWD' c1 = Blowfish.new(key, Blowfish.MODE_ECB) packedString = PKCS5Padding(string) return c1.encrypt(packedString) if __name__ == '__main__': s = 'testings' c = PandoraEncrypt(s) print(binascii.hexlify(c)) 

In both cases, output 223950ff19fbea872fce0ee543692ba7

+6
source
 def PKCS5Padding(string): byteNum = len(string) packingLength = 8 - byteNum % 8 appendage = chr(packingLength) * packingLength return string + appendage 

Use chr instead of str.

 >>> chr(1) '\x01' >>> str(1) '1' 

str * int β†’ repeat str

 >>> '!' * 5 '!!!!!' 
+3
source

Source: https://habr.com/ru/post/1486474/


All Articles