Python2 与 Python3 RSA 无填充加解密方式比较
来源:互联网 发布:rsa算法加密解密过程 编辑:程序博客网 时间:2024/05/22 03:15
Python2 与 Python3 RSA 无填充加解密方式比较
在对固定长度字符串做加密的时候,我们由于知道字符串的长度范围,所以会用到 no padding 的加密方式。
Python2 的 M2Crypto 的 RSA 加密使用比较稳定,而且不同的填充方式用起来也比较统一。
而 Python3 的 RSA 加密模块比较多,而且使用起来不太统一, 而在 no padding 的支持上也比较难找,主流的实现方法都没有介绍,我这里也是费了九牛二虎之力找到了 Python3 中的实现方法。
下面分别介绍 Python2 和 Python3 的实现代码,备份共享。
Python2:
#!/usr/bin/python2# -*- coding: utf-8 -*-author__ = 'owen'__date__ = '2017-11-22'import M2Cryptoimport base64ENCRYPT_SALT = b'12345678901234567890123456789012345679801234' # 44 charRSA_KEY_PATH = '/home/owen/key/'class MyRSACrypto: @classmethod def cryptor( cls, plain_text ): padding = 3 # no_padding salt = ENCRYPT_SALT base_dir = RSA_KEY_PATH public_key = open( base_dir + 'rsa.pub').read() # 公钥加密 buf = M2Crypto.BIO.MemoryBuffer('') buf.write( public_key ) rsa1 = M2Crypto.RSA.load_pub_key_bio( buf ) cipher = rsa1.public_encrypt( plain_text + salt, padding ) rsa_cipher = base64.b64encode( cipher ) return rsa_cipher[:-2] @classmethod def decryptor( cls, cipher_text_b64 ): padding = 3 # no_padding salt = ENCRYPT_SALT base_dir = RSA_KEY_PATH private_key = open( base_dir + 'rsa.pri').read() # 私钥解密 buf = M2Crypto.BIO.MemoryBuffer('') buf.write( private_key ) rsa1 = M2Crypto.RSA.load_key_bio( buf ) cipher_text = base64.b64decode( cipher_text_b64 + b"==" ) plain_text = rsa1.private_decrypt( cipher_text, padding ) return plain_text[:20]if __name__ == '__main__': text = '31' * 10 cipher_text = MyRSACrypto.cryptor( text ) print(cipher_text) plain_text = MyRSACrypto.decryptor( cipher_text ) print( plain_text )
Python3:
author__ = 'owen'__date__ = '2017-11-22'import base64from Crypto.PublicKey import RSAENCRYPT_SALT = b'12345678901234567890123456789012345679801234' # 44 charRSA_KEY_PATH = '/home/owen/key/'class MyRSACrypto: @classmethod def cryptor( cls, plain_text ): # print("\n================ crypto ========================\n") if( not isinstance( plain_text, bytes ) ): plain_text = plain_text.encode() salt = ENCRYPT_SALT base_dir = RSA_KEY_PATH with open(base_dir + 'rsa.pub') as fp: public_key = fp.read() if(not public_key): return None rsa_cryptor = RSA.importKey( public_key ) plain_text = ( plain_text + salt ) # 无填充方式公钥加密 cipher_text = rsa_cryptor.encrypt( plain_text, 0 ) pad_cnt = 64 - len(cipher_text[0]) cipher_text_rsa = pad_cnt * b'\0' + cipher_text[0] cipher_text_b64 = base64.b64encode( cipher_text_rsa ) return cipher_text_b64.decode()[:-2] @classmethod def decryptor( cls, cipher_text_b64 ): # print("\n================ decrypto ========================\n") if( not isinstance( cipher_text_b64, bytes ) ): cipher_text_b64 = cipher_text_b64.encode() base_dir = RSA_KEY_PATH with open( base_dir + 'rsa.pri' ) as fp: private_key = fp.read() if(not private_key): return None rsa_decryptor = RSA.importKey( private_key ) cipher_text = base64.b64decode( cipher_text_b64 + b"==" ) # 无填充方式私钥解密 plain_text = rsa_decryptor.decrypt( cipher_text ) return plain_text.decode()[:20]if __name__ == '__main__': text = '31' * 10 cipher_text = MyRSACrypto.cryptor( text ) print(cipher_text) plain_text = MyRSACrypto.decryptor( cipher_text ) print( plain_text )
阅读全文
0 0
- Python2 与 Python3 RSA 无填充加解密方式比较
- RSA加解密与签名
- RSA加解密与签名验签
- python3 与 python2的 区别比较
- python3 与 python2的 区别比较
- RSA-RSA加解密运算
- RSA加密与解密(比较详细))
- RSA加解密原理
- RSA加解密源码
- openssl rsa加解密
- RSA加解密算法
- java RSA 加解密
- RSA加解密
- RSA 加解密算法
- java RSA 加解密
- java RSA 加解密
- rsa 加解密
- android RSA加解密
- 51nod 1107 斜率小于0的连线数量 树状数组
- SSM框架整合(IntelliJ IDEA + maven + Spring + SpringMVC + MyBatis)
- 【Scikit-Learn 中文文档】3 广义线性模型
- 关于Android Studio项目上传Github
- C++下创建并使用DLL文件 (VS2013 + win7)
- Python2 与 Python3 RSA 无填充加解密方式比较
- HTML基础
- 编译caffe和MTCNN出现的问题和解决
- android ART编译预优化
- Android与JS交互,json传参问题
- JAVA基础之异常
- 6.18
- [通过scikit-learn掌握机器学习] 01基础
- 自动化测试工具Selenium入门