Python Blowfish Encryption
Question: I am struggling due to my incomplete knowledge of Java to convert this
encryption code to Python code. The two should have the exact 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-¾`*ã"


Answer: I get the same output for both 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 the output is `223950ff19fbea872fce0ee543692ba7`

