ELGamal非对称加密算法

ELGamal是非对称加密算法,和RSA类似

ELGamal密码体制是T.ElGamal在1985年提出的公钥密码体制。它的安全性是基于求解离散对数问题的困难性,是RSA以后比较有希望的一个公钥密码。美国的DSS(Digital Signature Standard)的DSA(Digital Signature Algorithm)算法就是经ElGamal算法演变而来。目前DSA算法应用也非常广泛。

1.公钥的生成算法

系统提供一个大素数p和GF(p)上的本原元素g。对每一个用户A可选择

XA∈[ 0, 1, 2, ……,p-1]

计算YA = gXA mod p

其中,XA就是用户的私钥,YA就成为用户的公钥,将YA公开,XA保密,由A自己掌握。

2.加密算法

若A欲与B保密通信,设明文是m,m∈[ 0, 1, 2, ……,p-1]则可按如下步骤进行:

(1)A找出B的公钥YB = gXB mod p

(2)A任意选随机数x∈[ 0, 1, 2, ……,p-1],A计算C1 = (g)x mod p

(3)A计算:K = (YB)x mod p = (gx)XB mod p,求C2  = ( K*m ) mod p

(4)A将(C1,C2)作为密文发送给B

3.解密算法

B收到密文以后解密方法如下:

(1)B用自己的密钥XB计算:K = (YB)x mod p = (gx)XB mod p = (C1)XB mod p

(2)B计算:K-1 mod p

(3)求m = ( K-1*C2 ) mod p

举例说明如下:

设p = 11,g = 7,在GF(11)上有70=1,71=7,72=5,73=2,74=3,75=10,76=4,77=6,78=9,79=8,710=1,因此7是GF(11)上的本原元素。

设A的私钥XA = 3,公钥YA = 2;B的私钥XB = 5,公钥YB = 10,假定A要将信息m = 7发送给B,A取随机数x = 5,A计算C1 = g5 mod 11 = 10,K = (YB)5 mod 11 = 10,C2 = K*m mod 11 = 70 mod 11 = 4。A 将(10,4)作为密文发送给B,B收到后计算K = (C1)XB mod p = 105 mod 11 = 10,K-1 = 10(根据K* K-1 = 1 mod 11),则m = K-1* C2  = 40 mod 11 = 7。

算法实现:https://github.com/ljheee/ELGamalCipher

时间: 2024-10-11 22:57:56

ELGamal非对称加密算法的相关文章

Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA

[前言] 本文简单的介绍了加密技术相关概念,最后总结了java中现有的加密技术以及用法和样例 [最简单的加密] 1.简单的概念 明文:加密前的信息 密文:机密后的信息 算法:加密或解密的算法 密钥:算法使用的钥匙(读作miyao.正确应该是miyue,可是大家都读miyao) 2.简单的样例 将123456每位数字都加1后得到234567, 当中123456就是明文.234567就是密文.加密密钥就是1,加密算法是每位加 3.对称加密和非对称加密 以上为例. 123456-->234567的加密

数字签名、数字证书、对称加密算法、非对称加密算法、单向加密(散列算法)

数字签名是什么? 1. 鲍勃有两把钥匙,一把是公钥,另一把是私钥. 2. 鲍勃把公钥送给他的朋友们----帕蒂.道格.苏珊----每人一把. 3. 苏珊给鲍勃写信,写完后用鲍勃的公钥加密,达到保密的效果. 4. 鲍勃收信后,用私钥解密,看到信件内容. 5. 鲍勃给苏珊回信,写完后用Hash函数,生成信件的摘要(digest). 6. 然后,鲍勃使用私钥,对这个摘要加密,生成"数字签名"(signature). 7. 鲍勃将这个签名,附在信件下面,一起发给苏珊. 8. 苏珊收信后,取下数

应用加密一;非对称加密算法揭秘

非对称加密算法 使用过程: 乙方生成两把密钥(公钥和私钥) 甲方获取乙方的公钥,然后用它对信息加密. 乙方得到加密后的信息,用私钥解密,乙方也可用私钥加密字符串 甲方获取乙方私钥加密数据,用公钥解密 优点: 更安全,密钥越长,它就越难破解 缺点: 加密速度慢 常用算法: RSA.Elgamal.背包算法.Rabin.D-H.ECC(椭圆曲线加密算法) 非对称加密方法 1公钥私钥的使用原则 ①每一个公钥都对应一个私钥. ②密钥对中,让大家都知道的是公钥,不告诉大家,只有自己知道的,是私钥. ③如果

常用加密算法之非对称加密算法

非对称加密算法 非对称加密算法是一种密钥的保密方法.非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey).公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密:如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密.因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法. 非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开:得到该公用密钥的乙方使用该密钥对

非对称加密算法

介绍 非对称加密算法需要两个密钥:公开密钥(publickey) 和 私有密钥(privatekey) 公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密:如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密 特点 算法强度复杂.安全性依赖于算法与密钥 加密解密速度慢 与对称加密算法的对比 对称加密只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥 非对称密钥体制有两种密钥,其中一个是公开的 RSA 算法原理 找出两个“很大”的质数:P & Q

openssl 非对称加密算法RSA命令详解

1.非对称加密算法概述 非对称加密算法也称公开密钥算法,其解决了对称加密算法密钥分配的问题,非对称加密算法基本特点如下: 1.加密密钥和解密密钥不同 2.密钥对中的一个密钥可以公开 3.根据公开密钥很难推算出私人密钥 根据非对称加密算法的特点,可用户数字签名.密钥交换.数据加密.但是由于非对称加密算法较对称加密算法加密速度慢很多,故最常用的用途是数字签名和密钥交换. 目前常用的非对称加密算法有RSA, DH和DSA三种,但并非都可以用于密钥交换和数字签名.而是RSA可用于数字签名和密钥交换,DH

非对称加密算法RSA--转

RSA     这种算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法.它易于理解和操作,也很流行.算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman.     这种加密算法的特点主要是密钥的变化,上文我们看到DES只有一个密钥.相当于只有一把钥匙,如果这把钥匙丢了,数据也就不安全了.RSA同时有两把钥匙,公钥与私钥.同时支持数字签名.数字签名的意义在于,对传输过来的数据进行校验.确保数据在传输工程中不被修改. 流程分

第十二章 非对称加密算法-RSA

注意:本节内容主要参考自<Java加密与解密的艺术(第2版)>第8章“高等加密算法--非对称加密算法” 12.1.RSA(最经典的非对称加密算法) 特点: 使用一套密钥即可完成加解密(与DH不同) 与DH不同的第二点是,RSA自己可以完成加解密,而DH需要依赖于对称加密算法 “私钥加密,公钥解密”或“公钥加密,私钥解密” 公钥长度远小于私钥长度(对下边的代码进行测试,自己比较结果) 加解密流程: 1)发送方(假设为甲方)构建密钥对,自己保留私钥,将公钥发送给接收方(假设为乙方) 2)甲方使用密

对称加密算法和非对称加密算法速度对比

测试环境: CPU 1 核 Intel 2.2GHZ 内存 1GB 算法 种类 对称加密算法 AES CBC 模式 非对称加密算法 RSA 256 加密明文长度为160 bytes 各运行10000次 上代码 test_aes.py from Crypto.Cipher import AES import time obj = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456') message = 'a' * 160 t1