Elgamal 加密演算法

2021-10-04 01:56:35 字數 1653 閱讀 2868

elgamal演算法是由tather elgamal在2023年提出的,它是一種基於離散對數難題的加密體系,與ras演算法一樣,既能用於資料加密,也能用於數字簽名。elgamal演算法是基於因數分解,而elgamal演算法是基於離散對數問題。與rsa演算法相比,elgamal演算法哪怕是使用相同的私鑰,對相同的明文進行加密,每次加密後得到的簽名也各不相同,有效的防止了網路中可能出現的重放攻擊。

1、elgamal金鑰生成

(1)隨機選擇乙個大素數p,且要求p-1有大素數因子。再選擇乙個模p的本原元α。將p和α公開。

(2)隨機選擇乙個整數d作為金鑰,2≤d≤p-2 。

(3)計算y=α^d mod p,取y為公鑰。

2、elgamal加密

(1)對於明文m加密,隨機地選取乙個整數k,2≤k≤p-2

(2)c1=α^k mod p

(3)c2=my^k mod p

(4)密文為(c1,c2)

3、elgamal解密

由密文可得明文m,m=c2/c1^d mod p

#include

#include

#include

intpow_mod

(int a,

int b,

int p)

return ans%p;

}void

elgamal_en

(int m,

int pub,

int p,

int g,

int*c1,

int*c2)

intelgamal_de

(int c1,

int c2,

int pri,

int p,

int g)

intis_prime

(int p)

return1;

}void

main()

while(!

is_prime

(p))

;printf

("輸入使用者a的私鑰:");

int pri;

scanf

("%d"

,&pri)

;int pub;

pub=

pow_mod

(g,pri,p)

;printf

("使用者a的公鑰為:%d\n"

,pub)

;printf

("輸入明文(小於%d):"

,p);

int m;

scanf

("%d"

,&m)

;int c1,c2;

elgamal_en

(m,pub,p,g,

&c1,

&c2)

;printf

("用公鑰加密後的密文為:c1=%d,c2=%d\n"

,c1,c2)

;int m_=

elgamal_de

(c1,c2,pri,p,g)

;printf

("用私鑰解密後的明文為:%d\n"

,m_)

;}

**參考

對稱加密演算法 DES加密演算法

一 對稱加密演算法 對稱加密也稱為常規加密 私鑰或單鑰加密。乙個對稱加密由5部分組成 明文 plaintext 這是原始資訊或資料,作為演算法的輸入。加密演算法 encryption algorithm 加密演算法對明文進行各種替換和轉換。金鑰 secret key 金鑰也是演算法的輸入。演算法進行...

gentry同態加密演算法 同態加密演算法

本文對同態加密演算法進行學習。參考文章同態加密演算法。定義同態加密演算法保證對聯合密文的解密結果等價於聯合明文。若存在同態加密演算法f,針對明文a和b,加密後分別得到a f a b f b 將其和a b 解密後得到a b,則同態加密演算法f被成為加法同態加密演算法。加法同態演算法的加密和解密分別用e...

對稱加密演算法 非對稱加密演算法

對稱加密演算法 對稱加密演算法是應用較早的加密演算法,技術成熟。在對稱加密演算法中,資料發信方將明文 原始資料 和加密金鑰一起經過特殊加密演算法處理後,使其變成複雜的加密密文傳送出去。收信方收到密文後,若想解讀原文,則需要使用加密用過的金鑰及相同演算法的逆演算法對密文進行解密,才能使其恢復成可讀明文...