我正在实现一个已经在PVSS中使用的半ELGamal密码系统(来自一篇研究论文)函数。不幸的是,我无法解密,正如算法中所描述的那样。
以下是初始化阶段:
选择一个安全素数p使得p1=2q,其中q也是素数,然后做一个循环群G,设G是这个群的随机生成元。在组中选择一个随机的x(私钥),并设y=G^x(公钥)。我简单地初始化算法如下:
p = 233;
g = 131;
x = 139;
y = g ^ x mod 233; //y = 182
现在设s(秘密)为23,我们计算我们的es(加密秘密):
s = 23
es = y ^ s mod 233// es = 231
为了解密es,我将es升为x(私钥)的逆,我应该返回g^s,假设ds是解密的值:
ds = es ^ 1/x mod 233 // 1/x = 57, ds = 116
这里有个问题,ds不等于g^s,但理论上应该是,因为:
回想一下,我们将%s加密为:
es = y ^ s mod 233
我们知道
y = g ^ x mod 233
所以,
es = g ^ x ^ s mod 233
有鉴于此,
ds = es ^ 1/x mod 233
// which means:
ds = g ^ x ^ s ^ 1/x mod 233
因此,我期望得到与G^S(131^23 mod 233)相同的结果,它必须是182,而我得到的ds结果是116。
我做的事情有什么不对吗?
当您有:
x * invX = 1 mod p
下列等式一般不成立:
(g ^ x) ^ invX = g mod p
上面的表达式是将g*g*...*g
乘以一定的次数,x*invx
,根据第一模关系,也就是k*p+1
。
假设生成器的大小为n<=P-1
:
g ^ n = 1 mod p
这意味着x*invx
必须是n
的倍数...
在序言中,您断言q=(p-1)/2
是素数,但在这里,情况并非如此,q=116
...
在您的示例中,g=131生成长度为58=(p-1)/4的序列。
那么,只有那些x具有属性g^x^(1/x)=1 mod p
:
58 116 132 154 174 203 229 231 232
注意,对于另一个生成器g=5,序列的最大长度为p-1,则满足(g^x)^invX=1 mod p
的唯一x为x=p-1
。
由于y^(p-1)=1 mod p
对于任意y不是p的倍数,x=p-1总是按照您的预期工作...
本文向大家介绍java实现折半排序算法,包括了java实现折半排序算法的使用技巧和注意事项,需要的朋友参考一下 折半插入排序(binary insertion sort)是对插入排序算法的一种改进,由于排序算法过程中,就是不断的依次将元素插入前面已排好序的序列中。由于前半部分为已排好序的数列,这样我们不用按顺序依次寻找插入点,可以采用折半查找的方法来加快寻找插入点的速度。 折半排序算法示意图: 以
MD5 加密算法 类型:MD5 可配置属性:无 AES 加密算法 类型:AES 可配置属性: 名称 数据类型 说明 aes-key-value String AES 使用的 KEY RC4 加密算法 类型:RC4 可配置属性: 名称 数据类型 说明 rc4-key-value String RC4 使用的 KEY
主要内容:折半查找算法,折半查找的性能分析,总结折半查找,也称 二分查找,在某些情况下相比于顺序查找,使用折半查找算法的效率更高。 但是该算法的使用的前提是静态查找表中的数据必须是有序的。 例如,在 这个查找表使用折半查找算法查找数据之前,需要首先对该表中的数据按照所查的关键字进行排序: 。 在折半查找之前对查找表按照所查的关键字进行排序的意思是:若查找表中存储的数据元素含有多个关键字时,使用哪种关键字做折半查找,就需要提前以该关键字对所有数据
给定 n,求 m 使得 m 是大于 n 的最小半素数。 下一个素数相当简单,而半素数则不那么简单。需要明确的是,只需要半素数,尽管同时获得因子会很方便。 我想到了一些方法,但我相信有更好的方法。 假设算术运算为O(1)。我使用了埃拉托斯特尼筛,它是O(n log log n),我知道阿特金筛,但我喜欢我的半优化埃拉托斯特尼。 从n开始计数,当你找到一个半素数时停止。 这看起来很愚蠢,但如果有一个O
(此纯属学术目的) 但是我不知道算法的引用,例如“AES”,“RSA”来发出初始化调用 或者在使用ECC时是否需要更改其他内容?我认为ECC中的消息大小限制是基于曲线大小的?上面的例子是192位。
本文向大家介绍JavaScript折半查找(二分查找)算法原理与实现方法示例,包括了JavaScript折半查找(二分查找)算法原理与实现方法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript折半查找(二分查找)算法原理与实现方法。分享给大家供大家参考,具体如下: 一、问题描述: 在一个升序数组中,使用折半查找得到要查询的值的索引位置。如: 注:折半查找必须在有序数组