首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python加密程序(ECC)

Python加密程序(ECC)
EN

Stack Overflow用户
提问于 2015-01-29 20:34:40
回答 1查看 937关注 0票数 0

我正在尝试编写一个加密程序,它将对用户的输入进行编码-如果这是一个单词-字符串。加密方法只是椭圆曲线加密的基本用法,我目前正在做程序的加密部分,在我做数学,逆模块等工作之前。公钥和私钥计算需要。目前,我使用的是密钥pub = 591max值(从两个随机素数的乘积得到)。这就是所有需要的信息,我正在测试加密的单词是“快乐”。

到目前为止,这里是代码。

代码语言:javascript
复制
word = 'happy'
pub = 5
m = 91

for i in range(pub):
    if i == 0:
        word = word

    else:
        word = output

    for x in word:
        a = [(((ord(z)*ord(z))+1)/m) for z in word]
        b = [chr(i) for i in a]
        c = [str(i) for i in b]
        d = ''.join([str(i) for i in c])
        output = d

我尝试做的是通过将它所属的ASCII值乘以它本身来加密每个字母,然后在添加1然后除以m的过程之后使用chr()函数重新连接字符串,从而创建一个新词。然后,使用这个新字符串,将它设置为循环中下一个周期的word的值,这样这个过程就会继续下去,直到它完成了发布次数并加密了单词。我在这方面有很多困难,我不知道从哪里开始解释这些问题。我对Python比较陌生,任何关于快速完成这项工作的建议和/或建议都将非常感谢。提前谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2015-01-29 21:14:43

首先,检查你的数学是否正确。您的公式(z**2 + 1)/m呈二次增长。我对crypto的理解相当有限,但对我来说它看起来并不正确。它应该是某种从输入到输出的一对一映射。但是它将几个相邻的字符映射到相同的输出。而且,每一轮的结果都会增长。

您只能将整数转换回ascii字符,最大范围为256。这就是您的错误消息所说的。它可能是在外部for循环的第二次迭代中抛出的。您可能需要再次将值范围减小到256。我想你遗漏了你正在尝试实现的算法的一个关键部分,也许是一些模运算。

还有一些次要的python提示:

您可以使用内置的power运算符**,因此您不必对ord()进行两次计算。

代码语言:javascript
复制
((ord(z) ** 2) + 1) / m 

您可以在一个步骤中转换回字符串,如下所示:

代码语言:javascript
复制
output = ''.join([str(chr(i)) for i in a])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28214909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档