我从不吹牛 2023-12-19 20:10 采纳率: 0%
浏览 20

椭圆曲线公钥密码加密与解密

椭圆曲线公钥密码
实验目的: 利用教材10.4节所给出的方法,编程实现椭圆曲线的加/解密。
该密码体制的参数是E11=(1,6)和G=(2,7),B的私钥nB=7。
(a)找出B的公钥PB。
(b)A要加密消息Pm=(10,9),其选择的随机值k=3,试确定密文Cm。
试给出B由Cm恢复Pm的计算过程。
这咋整啊?我都没教材,它的计算规则是啥都不知道。

  • 写回答

1条回答 默认 最新

  • 之乎者也· 2023-12-19 21:42
    关注

    在这个实验中,我们将使用椭圆曲线密码学进行加密和解密。首先,我们需要理解椭圆曲线密码学的基础知识,然后我们可以用这些知识来编程实现加密和解密过程。

    参数

    我们的参数是E11=(1,6),G=(2,7),B的私钥nB=7。

    步骤

    找出B的公钥PB
    B的公钥PB可以通过下面的公式计算:

    PB = nB * G mod E11

    这里,G是基点,nB是B的私钥,E11是椭圆曲线。计算结果就是B的公钥。

    A要加密消息Pm=(10,9)
    A要加密的消息Pm=(10,9),选择的随机值k=3。我们可以使用下面的公式来计算密文Cm:

    Cm = k * PB mod E11

    这里,PB是B的公钥,k是A选择的随机值,E11是椭圆曲线。计算结果就是密文Cm。

    B由Cm恢复Pm的计算过程
    B可以从密文Cm恢复消息Pm,使用下面的公式:

    Pm = Cm * nB^-1 mod E11

    这里,nB是B的私钥,Cm是密文,E11是椭圆曲线。计算结果就是恢复的消息Pm。

    代码实现

    下面是一个Python代码示例,实现了上述步骤:

    
    ```python
    # 导入需要的库  
    from sympy import symbols, Eq, solve, mod_inverse  
      
    # 定义椭圆曲线参数  
    a, b, p = symbols('a b p')  
    E11 = a*p**2 + b*p + 6  # 根据题目给出的椭圆曲线方程进行替换  
    G = 2, 7  # 根据题目给出的基点进行替换  
    nB = 7  # 根据题目给出的B的私钥进行替换  
    PB = nB * G[0], nB * G[1]  # 计算B的公钥  
    Cm = 3 * PB[0], 3 * PB[1]  # 假设A选择的随机值k=3,计算密文Cm  
    Pm = Cm[0] * mod_inverse(nB, p) % E11[0], Cm[1] * mod_inverse(nB, p) % E11[1]  # B从密文Cm恢复消息Pm的计算过程  
    print(f"B的公钥PB为:{PB}")  
    print(f"A加密的消息密文Cm为:{Cm}")  
    print(f"B从密文Cm恢复的消息Pm为:{Pm}")
    
    

    ```
    注意:这个代码示例假设了椭圆曲线方程和基点,你需要根据题目给出的具体参数进行替换。此外,这个代码示例没有包括错误处理和异常处理,你可能需要在实际使用中添加这些功能

    评论

报告相同问题?

问题事件

  • 创建了问题 12月19日

悬赏问题

  • ¥30 模拟电路 logisim
  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价