Traceback (most recent call last): File "C:\Users\ZHANG\PycharmProjects\pythonProject3\plane_main.py", line 72, in <module> c = encrypt(m, public_key) File "C:\Users\ZHANG\PycharmProjects\pythonProject3\plane_main.py", line 58, in encrypt c = pow(m, e, n) TypeError: unsupported operand type(s) for ** or pow(): 'str', 'int', 'int'
时间: 2023-09-10 07:09:02 浏览: 42
这个错误提示告诉我们,在执行 `pow(m, e, n)` 时,其中 `m` 的数据类型应该是整数类型(int),但实际上 `m` 的数据类型是字符串(str),所以不能进行幂运算。
你需要将输入的明文 `m` 转换为整数类型,例如使用 `int(m)` 将其转换为整数类型。修改代码如下:
```python
def encrypt(m, public_key):
e, n = public_key
m = int(m) # 将明文转换为整数类型
c = pow(m, e, n)
return c
```
注意,如果输入的明文不是合法的数字字符串,那么将无法转换为整数类型,程序会抛出 `ValueError` 异常。你可以使用 `try-except` 语句来捕捉这个异常并进行处理。例如:
```python
def encrypt(m, public_key):
e, n = public_key
try:
m = int(m) # 将明文转换为整数类型
except ValueError:
print("Invalid input, please enter a valid number.")
return None
c = pow(m, e, n)
return c
```
这样,如果输入的明文不是合法的数字字符串,程序会输出错误提示信息,并返回 `None`。