您好,欢迎来到五一七教育网。
搜索
您的当前位置:首页RSA设计报告

RSA设计报告

来源:五一七教育网


RSA加密算法设计报告

课题名称: RSA加密算法

设计人(姓名): 盛晓艳 设计人(学号): 201005020122

一.设计环境

1.软件环境:操作系统:Windows xp操作系统 编译软件:delphi7 二.算法描述

1.通过随机数产生两质数p、q 2. 计算n = p*q。

3. 计算n的欧拉函数 f(n)=(p-1)(q-1)。 4. 选择整数e,使e与 (n)互质,且16. 其中,公钥 KU={e,n},私钥 KR={d,n}。 7. 加密:C=Me mod n

8. 解密:M=Cd mod n=(Me)d mod n= Med mod n 。

三.源程序:

unit Unit1; interface uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Spin, ComCtrls; type

TForm1 = class(TForm) GroupBox2: TGroupBox; Edit4: TEdit; Edit3: TEdit; Edit2: TEdit; Edit10: TEdit; Edit1: TEdit;

Button2: TButton; Button1: TButton; Label8: TLabel; Label4: TLabel; Label12: TLabel; Label11: TLabel; Label1: TLabel;

GroupBox3: TGroupBox;

GroupBox4: TGroupBox; Label14: TLabel; Edit12: TEdit; Label6: TLabel; Edit9: TEdit; Label7: TLabel; Edit8: TEdit; Label15: TLabel; Edit15: TEdit;

GroupBox1: TGroupBox; Label9: TLabel; Label10: TLabel; Label13: TLabel; edit11: TRichEdit; edit13: TMemo; Button5: TButton; Button4: TButton; Button3: TButton; Edit14: TEdit; Button6: TButton;

procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject); private

{ Private declarations } public

{ Public declarations } end; var

Form1: TForm1;

implementation

uses ranlib, FGInt, FGIntPrimeGeneration, FGIntRSA;

{$R *.DFM}

//产生两个随机数

procedure TForm1.Button1Click(Sender: TObject);

var seed, i: integer;

var s1,s2: string;

begin

seed := Round(Time()*3600000.0);

WRandomInit(seed);

for i := 1 to 20 do begin WRandom();

WIRandom(0,1000); end;

s1:=floattostr(WIRandom(0,1000000000)); s2:=floattostr(WIRandom(0,1000000000));

edit1.text:=s1; edit2.text:=s2; end;

//下面的程序是求e,n,d的过程。

procedure TForm1.Button2Click(Sender: TObject); var

n, e, d, dp, dq, p, q, phi, one, two, , temp, nilgint,te1,te2,te3 : TFGInt; //TFGInt是FGint单元里定义的一个记录类型,用于表示大数,即用int也不能表达的整形数。 p1,q1,e1,d1,n1,nil1,Str:string; begin

//通过随机数产生 p,q if Edit1.Text<>'' then begin

Base10StringToFGInt(edit1.text, p); PrimeSearch(p);//产生质数

Base256StringToFGInt(edit2.text, q);//对可视字符解码,使之成为数字 PrimeSearch(q);//产生质数 FGIntMul(p, q, n);//作p*q=n

p.Number[1] := p.Number[1] - 1;//把p的最后一位减1 q.Number[1] := q.Number[1] - 1;

FGIntMul(p, q, phi);//作(p-1)*(q-1)=f(n)

//找出与f(n)(就是(p-1)*(q-1))互质的数(e)

// 常用的值为3,65537,但如果这些与f(n)不互质,用下面的代码 Base10StringToFGInt('65537', e); Base10StringToFGInt('1', one); Base10StringToFGInt('2', two);

FGIntGCD(phi, e, ); //检验是否互质的函数,如果f(n)和E互质,GCD等于1 While FGIntCompareAbs(, one) <> Eq Do //寻找互质数 Begin

FGIntadd(e, two, temp); //每次循环加2 FGIntCopy(temp, e); FGIntGCD(phi, e, ); End;

FGIntToBase10String(e,str); edit12.text:=str; FGIntDestroy(two); FGIntDestroy(one); FGIntDestroy();

FGIntModInv(e, phi, d); FGIntModInv(e, p, dp); FGIntModInv(e, q, dq);

p.Number[1] := p.Number[1] + 1; q.Number[1] := q.Number[1] + 1; Base10StringToFGInt('100', te1); Base10StringToFGInt('25', te2); FGIntMul(te1,te2,te3);

FGIntToBase10String(p,p1); edit3.text:=p1;

FGIntToBase10String(q,q1); edit4.text:=q1;

FGIntToBase10String(e,e1); edit12.text:=e1;

FGIntToBase10String(d,d1); edit8.text:=d1;

FGIntToBase10String(n,n1); edit9.text:=n1;

FGIntToBase10String(n,n1); edit15.text:=n1;

FGIntToBase10String(phi,nil1); edit10.text:=nil1; FGIntDestroy(phi); FGIntDestroy(nilgint); FGIntDestroy(p); FGIntDestroy(q); FGIntDestroy(e); FGIntDestroy(d); FGIntDestroy(n); end

else if MessageDlg('必须先产生随机数q',mtConfirmation,[mbYes,mbNO],0)=mrYes then exit else

用它来产生p,

以 exit; end;

//下面是加解密以及验证方式的程序。

//RSAEncrypt和RSADecrypt为一组(加解密方式),RSASign和RSAVerify为一组(验证方式)

procedure TForm1.Button3Click(Sender: TObject); var

test,b:string; e,n:tfgint; begin

test:=edit11.text;

Base10StringToFGInt(edit12.Text, e); Base10StringToFGInt(edit9.text, n); RSAEncrypt(test, e, n, test); edit13.Clear;

ConvertBase256to(test,b); edit13.lines.Add(b);

FGIntDestroy(e); FGIntDestroy(n); end;

procedure TForm1.Button4Click(Sender: TObject); var

test,b:string; d,n,nilgint:tfgint; begin

test:=edit13.text;

ConvertBaseto256(test,b); test:='';

Base10StringToFGInt(edit8.Text, d); Base10StringToFGInt(edit9.text, n);

RSADecrypt(b, d, n, Nilgint, Nilgint, Nilgint, Nilgint, test); edit14.text:=test; FGIntDestroy(d); FGIntDestroy(n);

FGIntDestroy(nilgint); end;

procedure TForm1.Button5Click(Sender: TObject); begin

edit11.clear;

edit13.clear; edit14.clear; end;

procedure TForm1.Button6Click(Sender: TObject); begin close; end; end.

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 517ttc.cn 版权所有 赣ICP备2024042791号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务