Python Crypto.util. Эквивалент префикса счетчика в Go? - PullRequest
0 голосов
/ 24 марта 2020

Я конвертирую некоторый код Python в Go и попал в ловушку.

Код Python выглядит следующим образом:

counter = Counter.new(64, prefix=nonce, initial_value=0)
decryptor = AES.new(key, AES.MODE_CTR, counter=counter)
decryptor.decrypt(ciphertext)

Моя попытка конвертировать что Go должен был использовать:

block, _ := aes.NewCipher(key)
stream := cipher.NewCTR(block, nonce)
stream.XORKeyStream(ciphertext, ciphertext)

Однако эти два метода, похоже, не дают один и тот же дешифрованный открытый текст. Я не могу найти информацию о том, как установить пользовательские префиксы и счетчики в Go. Этого можно добиться с помощью стандартной библиотеки Go или мне придется «свернуть свое собственное крипто».

Более того, я не думаю, что второй параметр NewCTR предназначен для одноразового использования и Я получаю сообщение об ошибке: IV length must equal block size. Нужно ли мне также устанавливать нестандартный размер блока? Возможно ли это?

Еще один метод, который я пытался использовать GCM:

block, _ := aes.NewCipher(key)
stream, _ := cipher.NewGCMWithNonceSize(block, 8)
stream.Open(ciphertext[:0], nonce, ciphertext, nil)

Но этот метод каждый раз давал пустой результат. время.

...