将二进制数据加密为二进制数据并进行解密

时间:2016-11-27 18:35:18

标签: python python-2.7 encryption aes

我想将二进制数据加密为二进制数据,然后以二进制文件解密。我怎么能在python中这样做?我试图使用AES但无法成功执行此操作。

 Key = '00000000’
 des = DES.new(key', DES.MODE_ECB)
 plain_text = "10101011"
 #encryption
 cipher_text = des.encrypt(plain_text)
 #decryption
 decrypted_pt = des.decrypt(cipher_text)

3 个答案:

答案 0 :(得分:1)

您没有指定,但您的代码使您看起来像是在使用ECB模式。这是我为cryptopals挑战编写的代码的简短示例,稍加修改以更好地适合您的示例代码。确保您的密钥长度为16个字节。此外,纯文本必须是16个字节的倍数。另外一个挑战是你实现了填充功能。

另外需要注意的是,在加密数据之后,最安全的存储方式是某种编码方式,通常使用Base64。然后当你去解密它时,你首先对数据进行解码。

from Crypto.Cipher import AES
import base64


def ecb_encrypt(message, key):
    """ Encrypts a message in AES ECB mode with a given key
    ACCEPTS: Two strings, the plaintext message and the key
    RETURNS: A bytes string of base64 encoded ciphertext
    """

    aes = AES.new(key, AES.MODE_ECB)
    return base64.b64encode(aes.encrypt(message)).decode()


def ecb_decrypt(encrypted, key):
    """ Decrypts a ciphertext in AES ECB mode with a given key
    ACCEPTS: Two strings, the base64 encoded ciphertext and the key
    RETURNS: A bytes string of the plaintext message
    """

    aes = AES.new(key, AES.MODE_ECB)
    return aes.decrypt(base64.b64decode(encrypted))


if __name__ == "__main__":

    Key = "0000000000000000"
    plain_text = "1010101110101011"

    cipher_text = ecb_encrypt(plain_text, Key)
    decrypted_pt = ecb_decrypt(cipher_text, Key).decode()

    print("Original message: {}".format(plain_text))
    print("Encrypted message: {}".format(cipher_text))
    print("Decrypted message: {}".format(decrypted_pt))

答案 1 :(得分:0)

你可能正在寻找的是python中的xor位运算符。 基本上它需要两个数字中的每一对位并且仅返回1并且仅当其中一个位为1时,否则返回0.

Input = int(raw_input('Encrypt/Decrypt this >>>'), 2) #input must be in bit format
key = 0b0100110 #'0b' indicates this is in second base
Encryption = key ^ Input
print Encryption

以“1101001”作为输入,代码将打印79(即1001111)

重复同样的过程:

Decryption = key ^ Encryption
print Decryption

将打印105,这是我们的原始输入(105 = 1101001)

如需更多阅读,请访问:https://wiki.python.org/moin/BitwiseOperatorshttps://www.tutorialspoint.com/python/bitwise_operators_example.htm

答案 2 :(得分:0)

我假设您正在使用PyCrypto,因此我建议您查看包含示例代码的this blog post,并引导您完成加密/解密二进制文件的过程(此处不值得复制代码)。

您可能还想查看simple-crypt,它摘要了一些使用PyCrypto的繁琐工作。