У меня есть ключ, который содержит 56 символов.И именно это должно быть одинаковое значение, то есть оно не может укоротить ключ.Этот ключ зашифрован в формате base64.Если есть способ, чтобы ключ был короче, фактическое значение ключа не должно быть изменено.Теперь мне нужно зашифровать строку с помощью алгоритма triple (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)