LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1200|回复: 4

我想写个小不的加密算法..遇到点问题..大家进来帮帮忙

[复制链接]
发表于 2006-5-4 14:33:26 | 显示全部楼层 |阅读模式
算法原理:
--------------
ElGamal算法既能用于数据加密也能用于数字签名,其安全性依赖于计算有限域上离散对数这一难题。
密钥对产生办法。首先选择一个素数p,两个随机数, g 和x,g, x < p, 计算 y = g^x ( mod p ),则其公钥为 y, g 和p。私钥是x。g和p可由一组用户共享。
ElGamal用于数字签名。被签信息为M,首先选择一个随机数k, k与 p - 1互质,计算

a = g^k ( mod p )
再用扩展 Euclidean 算法对下面方程求解b:

M = xa + kb ( mod p - 1 )

签名就是( a, b )。随机数k须丢弃。
验证时要验证下式:

y^a * a^b ( mod p ) = g^M ( mod p )

同时一定要检验是否满足1<= a < p。否则签名容易伪造。
ElGamal用于加密。被加密信息为M,首先选择一个随机数k,k与 p - 1互质,计算

a = g^k ( mod p )
b = y^k M ( mod p )


( a, b )为密文,是明文的两倍长。解密时计算

M = b / a^x ( mod p )

--------------------
[color="Red"]

我想问问 a^x 是什么运算啊? 是 a的 x次方吗?


---------------------
发表于 2006-5-4 15:53:53 | 显示全部楼层
是的.不过具体计算起来应该是边乘边约简。
有必要提醒你,Elgamal或类似的基于因子分解或DLP的算法是在大整数(512bit)下才有实际意义的,Java自带的long只有64bit.
所以,编起来没那么简单!
回复 支持 反对

使用道具 举报

发表于 2006-5-11 22:25:56 | 显示全部楼层
呵呵,写个大数类
回复 支持 反对

使用道具 举报

发表于 2006-5-12 07:52:00 | 显示全部楼层
要自己写个类来实现大数计算不容易,看看有没有现成的?
回复 支持 反对

使用道具 举报

发表于 2006-5-12 07:59:51 | 显示全部楼层
类 BigInteger 应该足够了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表