超级简洁的Python风格加解密

超级简洁的Python风格加解密

    • 示例
    • 安装
    • API文档和代码仓库
    • 加密一切对象!
    • 实现与依赖

加密分三步:

  1. 引入加密函数
  2. 把对象和密钥丢进加密函数里
  3. 把密文取出来

解密也分三步:

  1. 引入解密函数
  2. 把密文和密钥丢进加密函数里
  3. 把对象取出来

示例

  • RSA
    import loopyCryptor
    
    obj = [123,"HELLO",None,{"How are you?":b"I am fine and you?"}]
    
    # 生成一对密钥
    public_key, private_key = loopyCryptor.generate_RSA_key()
    
    # 加密
    cipher_byte = loopyCryptor.RSA_encrypt(obj,public_key)
    
    # 解密
    decrypt_obj = loopyCryptor.RSA_decrypt(cipher_byte,private_key)
    
    # 输出结果
    print(decrypt_obj)
    # [123, 'HELLO', None, {'How are you?': b'I am fine and you?'}] 
    print(decrypt_obj==obj)
    # True
    print(list(map(type, decrypt_obj)))
    # [, , , ]
    
  • AES
    import loopyCryptor
    
    obj = [123,"HELLO",None,{"How are you?":b"I am fine and you?"}]
    
    # 生成一个密钥
    AES_key = loopyCryptor.generate_AES_key()
    
    # 加密
    cipher_byte = loopyCryptor.AES_encrypt(obj,AES_key)
    
    # 解密
    decrypt_obj = loopyCryptor.AES_decrypt(cipher_byte,AES_key)
    
    # 输出结果
    print(decrypt_obj)
    # [123, 'HELLO', None, {'How are you?': b'I am fine and you?'}] 
    print(decrypt_obj==obj)
    # True
    print(list(map(type, decrypt_obj)))
    # [, , , ]
    
  • 也可以使用更简洁的方式来调用
    from loopyCryptor import encrypt, decrypt, generate_AES_key
    
    my_obj = [1,2,3]
    
    # 生成密钥并设置为默认密钥
    key_pair = generate_RSA_key(set_default=True)
    
    # 加密my_obj
    cipher_byte = encrypt(my_obj, method = "RSA")
    
    # 解密回原来的对象
    decrypt_obj = decrypt(cipher_byte, method = "RSA")
    

安装

pip install loopyCryptor

API文档和代码仓库

  • 文档见 这里

  • 代码仓库在这里

加密一切对象!

loopyCrypto最近进入了0.1.0版本的时代,现在它具有了加密大部分python中对象的能力.它能够使用对称(AES)或非对称(RSA)的方式正常加解密以下类型的对象:

  • None
  • 布尔变量TrueFalse
  • 整数(int),长整数(long int),浮点数(float)
  • 普通的或Unicode编码的字符串(str)
  • 仅包含可加密对象的元组(tuple),列表(list),集合(set)和字典(dic)
  • 在模块顶层定义的函数(function),以及内置函数(built-in function)
  • 在模块顶层定义的类(class)
  • 当类的__dict__成员或__getstate__()返回值是可加密时,实例化出的类对象

同时,你加密时输入的是什么类型的对象,解密后输出也将会是那个类型.(实际上会得到一个深拷贝的原对象)

实现与依赖

主要依赖于两个轮子:

  • pycryptodome:强大的加密解密工具
  • pickle:强大的对象序列化和反序列化工具

loopyCrypto中:

  • pycryptodome中AES,RSA加解密的C风格的接口wrap了一层,使其符合python的一致风格,并对加解密的各种要求(比如byte boundary)进行了自动调整,使得用户无需考虑底层加解密的各种要求
  • pycryptodome中AES,RSA密钥的生成wrap了一层,使其简洁易用
  • 使用pickle将待加密的python对象序列化,使得用户无需考虑对象的类型

总的来说,我把加解密轮子的一部分改得符合(我认为的)python哲学,使用时无需考虑对象类型或者输入对象的各种要求.

你可能感兴趣的:(超级简洁的Python风格加解密)