使用56个字符的密钥加密字符串

时间:2019-05-26 06:07:56

标签: python-3.x base64 tripledes

我有一个包含56个字符的密钥。而恰恰那应该是相同的值,也就是说,它不能缩短密钥。该密钥以base64格式加密。如果有一种方法可以使密钥更短,则不应更改密钥的实际值。现在,我需要使用此密钥使用三重(DES3,pkcs7)算法加密字符串,并以base64格式发送它。

让我强调一下,该密钥用作标识符。我不能使用其他算法。

init_key = "YTAzZTYyNDNiMTljMzg0YzYxY2NhMGU4NjU1ODc2N2FkYTAwMGJiOQ==" 

通过指导朋友,我们获得了一些相当不错的功能。我将在下面进行编码。但是在此功能中,按键已被缩短,不会出错。我通过编写56个字节或...的输入来了解此算法。

显然,此密钥是正确的。我的方法可能是错误的,或者必须缩短密钥,例如在该循环上。因为相同的键与PHP代码一起使用,如下所示。

function encrypt_pkcs7 ($str, $key)
    {
        $key = base64_decode($key);
        $cipherText = OpenSSL_encrypt($str, "DES-EDE3", $key, 
        OPENSSL_RAW_DATA);
        return base64_encode($cipherText);
    }

现在,我想请您提供有关如何解决此问题的指导。也许我应该使用DES3以外的模块。谢谢您对我的同情。

def pad(text,pad_size=16):
    text_length = len(text)
    last_block_size = text_length % pad_size
    remaining_space = pad_size - last_block_size

    text = text + '='*remaining_space

    return text

def encrypt_DES3(terminal_id,order_id,amount):
    """

    :param terminal_id: String-for example: EUDuTQrp
    :param order_id: integer- for example: 123456
    :param amount: integer - for example: 60000
    :return: encrypt "terminal_id;oreder_id;integer"
    """
    secret_key_text = "YTAzZTYyND122331"   ## you can only have key of size 16 or 24
    text = terminal_id + ';' + str(order_id) + ';' + str(amount)
    text = pad(text,8)
    cipher = DES3.new(secret_key_text, DES3.MODE_ECB)
    my_export = cipher.encrypt(text)

    return base64.b64encode(my_export)

但是我继续收到的错误是这个。

File "<pyshell#18>", line 1, in <module>
encrypt_DES3('EUDuTQrp',123456,60000)
File "<pyshell#17>", line 17, in encrypt_DES3
cipher = DES3.new(key, DES3.MODE_ECB)
File "/usr/lib/python3/dist-packages/Crypto/Cipher/DES3.py", line 
113, in new
return DES3Cipher(key, *args, **kwargs)
File "/usr/lib/python3/dist-packages/Crypto/Cipher/DES3.py", line 
76, in __init__
blockalgo.BlockAlgo.__init__(self, _DES3, key, *args, **kwargs)
File "/usr/lib/python3/dist-packages/Crypto/Cipher/blockalgo.py", 
line 141, in __init__
self._cipher = factory.new(key, *args, **kwargs)
ValueError: Invalid key size (must be either 16 or 24 bytes long)

0 个答案:

没有答案