python - 如何使用 RSA 方案加密字符串?
问题描述
我正在使用来自此站点的 RSA 实施教程:https ://sahandsaba.com/cryptography-rsa-part-1.html
他们使用此功能进行加密:
def power(x, m, n):
"""Calculate x^m modulo n using O(log(m)) operations."""
a = 1
while m > 0:
if m % 2 == 1:
a = (a * x) % n
x = (x * x) % n
m //= 2
return a
def rsa_encrypt(message, n, e):
return modular.power(message, e, n)
然后他加密一个数字:
>>> message = 123
>>> cipher = rsa_encrypt(message, n, e)
我如何加密整个字符串?我想使用此实现加密由哈希生成的字符串。
解决方案
您缺少的两个函数是从字节序列到数字并返回的函数:
def bytes2num(b):
return b[0] + 256 * bytes2num(b[1:]) if b else 0
def num2bytes(n):
return bytes([n % 256]) + num2bytes(n // 256) if n else b''
如果要使用字符串,可以定义函数:
def str2num(s):
return bytes2num(s.encode('utf-8'))
def num2str(n):
return num2bytes(n).decode('utf-8')
如果您的消息很长,您应该使这些实现迭代。
测试:
>>> s = 'Hello, world!'
>>> str2num(s)
2645608968347327576478451524936
>>> num2str(2645608968347327576478451524936)
'Hello, world!'
推荐阅读
- flutter - Flutter:检测多个小部件上的点击
- java - 如何在方法中流式传输 Java List (Varargs) 的值?
- c# - ASP.NET Core MVC,设置线程文化没有效果
- c# - ObservableCollection 和 INotifyPropertyChanged 的 WPF MVVM 问题
- android - 将 Parse 查询数据从辅助类返回到我的活动
- java - 在 GraphQL (Apollo) 中转换 InputType 对象
- laravel - Laravel:每个外键的唯一外键(user_id)
- c - 二进制插值搜索找不到我正在寻找的数字 (C)
- python - 如何解析“UTC+01:00”格式的时区
- oracle - 如何在 clob 中找到一段文本并用所需的文本包装它?