博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python3 rsa 加解密 支持长字符串
阅读量:5302 次
发布时间:2019-06-14

本文共 2486 字,大约阅读时间需要 8 分钟。

# rsa 加密def rsa_encrypt_bytes(bytes_str, n, e):    if not isinstance(bytes_str, bytes):        return None    # 导入rsa库    import rsa.common    pubkey = rsa.PublicKey(n, e)    key_length = rsa.common.byte_size(n)    max_msg_length = key_length - 11    count = len(bytes_str) // max_msg_length    if len(bytes_str) % max_msg_length > 0:        count = count + 1    cry_bytes = b''    # rsa加密要以max_msg_length分组, 每组分别加密(加密的数据长度为key_length, 解密时每key_length长度解密然后相加)    for i in range(count):        start = max_msg_length * i        size = max_msg_length        content = bytes_str[start: start + size]        # rsa 分组 加密        crypto = rsa.encrypt(content, pubkey)        cry_bytes = cry_bytes + crypto    return cry_bytes# rsa 解密, bytes_string是rsa_encrypt_hex, rsa_encrypt_bytes的返回值def rsa_decrypt(bytes_string, n, e, d, p, q):    # 导入rsa库    import rsa.common    pri_key = rsa.PrivateKey(n, e, d, p, q)    key_length = rsa.common.byte_size(n)    if len(bytes_string) % key_length != 0:        # 如果数据长度不是key_length的整数倍, 则数据是无效的        return None    count = len(bytes_string) // key_length    d_cty_bytes = b''    # 分组解密    for i in range(count):        start = key_length * i        size = key_length        content = bytes_string[start: start + size]                # rsa 分组 解密        d_crypto = rsa.decrypt(content, pri_key)        d_cty_bytes = d_cty_bytes + d_crypto    return d_cty_bytes# rsa 加密, 注意: 这里是传递的是16进制字符串def rsa_encrypt_hex(hex_string, n, e):    return rsa_encrypt_bytes(bytes.fromhex(hex_string), n, e)# rsa 库的测试def test_encrypt_decrypt():    import rsa    # 产生公钥私钥    (pub, pri) = rsa.newkeys(256)    # 构建新的公钥私钥    pubkey = rsa.PublicKey(pri.n, pri.e)    pri_key = rsa.PrivateKey(pri.n, pri.e, pri.d, pri.p, pri.q)    message = b'\x00\x00\x00\x00\x01'    # 加密 message    crypto = rsa.encrypt(message, pubkey)    # 解密    d_crypto = rsa.decrypt(crypto, pri_key)    print(d_crypto)if __name__ == '__main__':    import rsa    keys = rsa.newkeys(256)    bts_str = 'hello world 中文'.encode()    crypto_bytes = rsa_encrypt_bytes(bts_str, keys[1].n, keys[1].e)    d_crypto_bytes = rsa_decrypt(crypto_bytes, keys[1].n, keys[1].e, keys[1].d, keys[1].p, keys[1].q)    print(d_crypto_bytes.decode())    hex_str = '001122334455AAff'    crypto_bytes = rsa_encrypt_hex(hex_str, keys[1].n, keys[1].e)    d_crypto_bytes = rsa_decrypt(crypto_bytes, keys[1].n, keys[1].e, keys[1].d, keys[1].p, keys[1].q)    print(d_crypto_bytes.hex())

 

转载于:https://www.cnblogs.com/baigoogledu/p/9858905.html

你可能感兴趣的文章
mysql中key 、primary key 、unique key 与index区别
查看>>
bzoj2257
查看>>
Linux查看文件编码格式及文件编码转换<转>
查看>>
Leetcode: Find Leaves of Binary Tree
查看>>
Vue 模板解释
查看>>
http://www.bootcss.com/
查看>>
20145308 《网络对抗》 注入shellcode+Return-to-libc攻击 学习总结
查看>>
将多张图片和文字合成一张图片
查看>>
自己动手写ORM(01):解析表达式树生成Sql碎片
查看>>
如何使用USBWebserver在本机快速建立网站测试环境
查看>>
百度Ueditor编辑器的Html模式自动替换样式的解决方法
查看>>
变量提升
查看>>
线性表可用顺序表或链表存储的优缺点
查看>>
在现有的mysql主从基础上,搭建mycat实现数据的读写分离
查看>>
[Flex] flex手机项目如何限制横竖屏?只允许横屏?
查看>>
tensorflow的graph和session
查看>>
JavaScript动画打开半透明提示层
查看>>
Mybatis生成resulteMap时的注意事项
查看>>
jquery-jqzoom 插件 用例
查看>>
1007. Maximum Subsequence Sum (25)
查看>>