Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 3, 2018 15:17:10

Headmaster
Зарегистрирован: 2015-11-06
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Шифрование, из Java в Python

Во вложении код на Java. Берётся строка и кодируется по алгоритму. Пример результата
pYoP0PkMljeh84o1zGPTv2BblcMsRAHi85ZpA5rGPsFe0KElgtQyROLxQoo/FcWzwrsqUYbngDJ5vb+xXmeojCc4Ul3mdhde8DSHHRU937fWrvA8M8JgDULsODf1jUSBjXgkARx7TYA=

Пытаюсь то же самое реализовать на Python

 def _pkcs5_pad(s):
	BS = 16
	return s + (BS - len(s) % BS) * chr(BS - len(s) % BS)
def encode(data):
	iv = b'9UCrvdCl'
	key = ''.join(map(six.unichr, [
		0xA2, 0x15, 0x37, 0x08, 0xCA, 0x62,
		0xC1, 0xD2, 0xF7, 0xF1, 0x93, 0xDF,
		0xD2, 0x15, 0x4F, 0x79, 0x06, 0x67,
		0x7A, 0x82, 0x94, 0x16, 0x32, 0x95
	])).encode('latin-1')
	cipher = DES3.new(key, DES3.MODE_CBC, IV=iv)
	data = _pkcs5_pad(data)
	return base64.b64encode(cipher.encrypt(data)).decode('latin-1')
data = 'from=CGK&to=AMQ&sdate=10-01-2018&edate=10-07-2018&type=R&cabin=E&promo=1&adult=1&child=0&infant=0'
print(encode(data))

Результат не совпадает (конец строки)
pYoP0PkMljeh84o1zGPTv2BblcMsRAHi85ZpA5rGPsFe0KElgtQyROLxQoo/FcWzwrsqUYbngDJ5vb+xXmeojCc4Ul3mdhde8DSHHRU937fWrvA8M8JgDULsODf1jUSB73S1edTBj01klmzN+KOjNg==

Как исправить?

Прикреплённый файлы:
attachment src.rar (7,8 KБ)

Офлайн

#2 Сен. 3, 2018 15:33:05

Headmaster
Зарегистрирован: 2015-11-06
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Шифрование, из Java в Python

Наверно стоит ещё версию питона и импорты указать

python 2.7, pycrypto=2.6

 import base64
import six
from Crypto.Cipher import DES3

Отредактировано Headmaster (Сен. 3, 2018 15:33:24)

Офлайн

#3 Сен. 4, 2018 02:27:40

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Шифрование, из Java в Python

Ты перепутал алгоритмы. Размер блока в DES3 равен 8 байтам, а не 16.
https://ru.wikipedia.org/wiki/Triple_DES

  
>>> import base64
>>> import six
>>> from Crypto.Cipher import DES3
>>> 
>>> def _pkcs5_pad(s):
...     BS = 8
...     return s + (BS - len(s) % BS) * chr(BS - len(s) % BS)
... 
>>> def encode(data):
...     iv = b'9UCrvdCl'
...     key = ''.join(map(six.unichr, [
...         0xA2, 0x15, 0x37, 0x08, 0xCA, 0x62,
...         0xC1, 0xD2, 0xF7, 0xF1, 0x93, 0xDF,
...         0xD2, 0x15, 0x4F, 0x79, 0x06, 0x67,
...         0x7A, 0x82, 0x94, 0x16, 0x32, 0x95
...     ])).encode('latin-1')
...     cipher = DES3.new(key, DES3.MODE_CBC, IV=iv)
...     data = _pkcs5_pad(data)
...     return base64.b64encode(cipher.encrypt(data)).decode('latin-1')
... 
>>> data = 'from=CGK&to=AMQ&sdate=10-01-2018&edate=10-07-2018&type=R&cabin=E&promo=1&adult=1&child=0&infant=0'
>>> print(encode(data))
pYoP0PkMljeh84o1zGPTv2BblcMsRAHi85ZpA5rGPsFe0KElgtQyROLxQoo/FcWzwrsqUYbngDJ5vb+xXmeojCc4Ul3mdhde8DSHHRU937fWrvA8M8JgDULsODf1jUSBjXgkARx7TYA=
>>>



Офлайн

#4 Сен. 4, 2018 12:23:06

Headmaster
Зарегистрирован: 2015-11-06
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Шифрование, из Java в Python

py.user.next
Ты перепутал алгоритмы. Размер блока в DES3 равен 8 байтам, а не 16.https://ru.wikipedia.org/wiki/Triple_DES

Верно, спасибо

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version