2013-09-22 4 views
0

Здравствуйте, я использую программу AES, а выход в зашифрованном формате - bytearray. С одной строки я даюсьHexidecimal to bytearray

e37c1a5132a9a121d4fbb98ba42a684 

однако шестигранной массив должен быть

e3 7c 1a 51 32 a9 a1 21 d4 fb b9 8b 0a 42 a6 84 

4-й в последний член 0a, но в каскадной строки отображается как только равнина с. Как я могу это обнаружить?

В приведенной ниже ссылке я пытаюсь перейти от первой сгенерированной ссылки к массиву байтов, однако, когда мне не хватает 0 в 0a, строка выходит из строя.

http://laurentcharignon.com/blog/?p=37

+1

как вы делаете строку (ту, что отсутствует 0 (? –

+0

Я не эксперт, но вы можете отправить еще пару байтов в качестве проверки CRC и отбросить неисправные? – zenpoy

+0

По какой-то причине, я думаю, когда я его запускал, эта строка не выполнялась, но при шифровании эта строка защищает его: if ((data [i] & 0xFF) <16) str = str + "0" + java.lang .Integer.toHexString (данные [i] &0xFF); –

ответ

2

Проблема заключается в том, что в петле, то результат hex() функции не включает в себя начальные нули после префикса '0x' значений меньше, чем 16, так что это hex(10)'0xa' и hex(10)[2:] является 'a' (вызов str() не является необходимым). Таким образом, вместо:

result = "" 
for char in ciph: 
    result += str((hex(ord(char))))[2:] 

Вы можете не использовать hex() с чем-то вроде этого:

result = "" 
for char in ciph: 
    result += '%02x' % ord(char) 

чуть более кратким способом, чтобы сделать то же самое было бы с выражением генератора:

result = ''.join('%02x' % ord(char) for char in ciph) 

Пространства могут быть добавлены между каждым двухбайтовым шестнадцатеричным значением со следующим немного отличающимся выражением, чтобы сделать результат более читаемым:

 ' '.join('%02x' % ord(char) for char in ciph) 
2

Этот вид недостающей информации, не подлежит возмещению. Вы должны исправить место, которое генерирует эту сломанную строку. Другой важной исходной строкой для создания вашей строки выше будет:

e3 7c 1a 51 32 a9 a1 21 d4 fb b9 8b a4 02 a6 84 

Здесь 0 вставляется в другое место. На техническом уровне невозможно определить, какая из этих исходных строк была использована для создания вышеупомянутого шестнадцатеричного представления с опущенными нулями.