代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
C
】
ElGamal密码算法
作者:
DDT
/ 发布于
2012/7/16
/
563
ElGamal密码算法
<div>?/* *This program is about the ElGamal algorithm. *Author : Ting *E-mail:kilvdn@yahoo.com.cn *Addr: China University of Geosciences ( WuHan ) *Note: ElGamal algorithm is based on the Discrete Logarithm Problem */ #include <stdio.h> /******************************** 变量定义 p:大素数 d:随机选择的秘密的解密钥 y:公开的加密钥 m: 明文 *********************************/ int p , d , y , m ; /**************************************** int Mod(int x, int y , int m) ; 此函数运用模重复平方计算法快速计算幂取模 需要将y转成2进制 , 在此通过模2,除2,来求 y各个bit位上的值 ****************************************/ int Mod(int x,int y,int m){//模平方的运算 int a,b; a=1; b=x; while( y ){ if( y % 2 == 1 ) a = a * b % m ; y /= 2 ; b = b * b % m ; } return a; } /********************************************** int Inverse(int a , int b , int &x , int &y) ; 这个函数是求逆元的,用的是扩展的欧几里得算法 通过此算法得到的是 a_1*a+b_1*b=1 ; a_1就是 a mod b 的逆元 ***********************************************/ int a_1 , b_1 ; int Inverse(int a,int b,int &a_1,int &b_1) { int t,d; if (b==0) { a_1=1; b_1=0; return a; } d=Inverse(b,a%b,a_1,b_1); t=a_1; a_1=b_1; b_1=t-a/b*b_1; return d; } void Encry(int p,int a,int d,int m,int k) { int u , c1 , c2; y = Mod( a , d , p ) ; u = Mod( y , k , p ) ; c1 = Mod( a , k , p ) ; c2 = u * m % p ; printf("c1=%d c2=%d \n",c1,c2) ; } void Decry(int c1,int c2,int d,int p) { int v , v_1 , m ; v = Mod ( c1 , d , p ) ; Inverse( v , p ,a_1 , b_1 ) ; a_1 = ( a_1 + p ) % p ; v_1 = a_1 ; m = c2 * v_1 % p ; printf("m=%d \n", m ) ; } int main() { int flag ; while( 1 ){ printf("请选择要执行的操作: 1.Encryption 2.Decryption \n"); scanf("%d",&flag); if(1==flag){ int a , k; printf("please input (p,a,d,m,k): "); scanf("%d%d%d%d%d",&p,&a,&d,&m,&k); Encry( p , a , d , m , k ) ; } else{ int p , d , c1 , c2; printf("please input (c1,c2,d,p): "); scanf("%d%d%d%d",&c1,&c2,&d,&p); Decry( c1 , c2 , d , p ) ; } } return 0; } /* p = 2579 a = 2 d = 765 m = 1299 k = 853 */ </div>
试试其它关键字
ElGamal密码
同语言下
.
获取手机通讯录 iOS去除数字以外的所有字符
.
异步加载音乐等资源
.
交通罚单管理系统
.
freemark实现,简单的替换
.
计算斐波那契数列
.
base64解码 包括解码长度
.
图像显示
.
冒泡排序
.
输入十进制数,输出指定进制
.
链式栈
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
DDT
贡献的其它代码
(
160
)
.
Oracle统计表的数据行和数据块信息
.
html标签闭合检测与修复
.
Powershell日期计算
.
Powershell的Base64编解码
.
Powershell并行循环
.
Powershell目录中搜索文本
.
Powershell枚举远程机器上的本地权限组
.
VBScript解析csv文件
.
快速排序之Powershell
.
批处理输出格式化时间字符串
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3