You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python的NumPy实现RSA加密二维数组遇问题求助

解决RSA加密NumPy数组的两个问题

一、解决AttributeError: module 'numpy' has no attribute 'float128'错误

  • 原因:np.float128并非在所有平台/NumPy版本中都可用(比如Windows系统通常不支持该类型),且RSA加密是整数模运算,完全不需要浮点类型,使用浮点类型反而会引入精度问题。
  • 解决方案:直接放弃使用浮点类型,改用整数类型进行运算;如果确实需要高精度浮点,可替换为np.longdouble(跨平台兼容的高精度浮点类型),但这里不推荐,因为整数运算才是正确的选择。

二、修正加密结果与预期不符的问题

问题原因

你当前使用np.power(Bmatrix, 17, dtype=np.float64)再取模,会导致大数精度丢失:float64只能精确表示到253以内的整数,而`Bmatrix`中的元素(比如599)的17次方远大于253,浮点运算无法准确存储这个大数,取模后自然得到错误结果。

正确解决方案

使用Python内置的pow函数的三参数形式pow(base, exponent, modulus),它会高效地计算(base^exponent) % modulus,且全程用整数运算,不会丢失精度。结合NumPy的vectorize函数可以将这个运算向量化,应用到整个数组上。

修正后的代码

import numpy as np

# 原始矩阵
Bmatrix = np.array([
    [96, 205, 325, 460, 599],
    [13, 109, 207, 307, 416],
    [11, 24, 122, 224, 333],
    [15, 32, 53, 155, 268],
    [4, 17, 37, 68, 191]
])

# 向量化模幂运算
mod_pow = np.vectorize(lambda x: pow(x, 17, 703))
encrypted_matrix = mod_pow(Bmatrix)

print(encrypted_matrix)

输出结果

[[153 394 162  81 534]
 [535 167 560 545 218]
 [ 64 612 582 166 629]
 [698 459 451 127 181]
 [176 161  37 216 191]]

完全匹配期望输出。

内容的提问来源于stack exchange,提问作者Dr Simhachalam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 14:52:31