2015-06-01 2 views
0

Я использую libsodium с питоном привязками в pysodium 0.6.6pysodium crypto_box_open метания ValueError

При использовании crypto_box и crypto_box_open, я всегда получаю ValueError. Вот простой пример:

import pysodium 
import random 

serverPK, serverSK = pysodium.crypto_box_keypair() 
clientPK, clientSK = pysodium.crypto_box_keypair() 

testText = "test message" 

nonce1 = str(random.random()) 
nonce2 = str(random.random()) 

cipherText = pysodium.crypto_secretbox(testText,nonce1,clientPK) 
message = pysodium.crypto_secretbox_open(cipherText, nonce2, clientSK) 
print message 

А вот ошибка:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/Users/.../pysodium-0.6.6/pysodium/__init__.py", line 181, in crypto_box_open 
__check(sodium.crypto_box_open(msg, padded, ctypes.c_ulonglong(len(padded)), nonce, pk, sk)) 
    File "/Users/.../pysodium-0.6.6/pysodium/__init__.py", line 70, in __check 
raise ValueError 
ValueError 

ответ

2

crypto_box_keypair() создает пару ключей, которые будут использоваться с crypto_box().

crypto_secretbox() не является асимметричным шифрованием: один ключ используется как для шифрования, так и для дешифрования. Если это на самом деле то, что вы хотите, ключ может быть создан таким образом:

key = pysodium.randombytes(pysodium.crypto_secretbox_KEYBYTES) 

Для данного ключа, данный случай должен быть уникальным для каждого сообщения, и должен быть длинным pysodium.crypto_secretbox_NONCEBYTES байт. Это может быть простой счетчик, или случайное временное значение:

nonce = pysodium.randombytes(pysodium.crypto_secretbox_NONCEBYTES) 

В отличие от секретного ключа, случайное слово может быть публичным. Но он должен быть одинаковым для шифрования и для дешифрования:

cipherText = pysodium.crypto_secretbox(testText, nonce, key) 
message = pysodium.crypto_secretbox_open(cipherText, nonce, key) 

документация libsodium приводятся примеры о том, как использовать box и secretbox, которые могут быть легко переведены на pysodium эквиваленты.

Смежные вопросы