密码学报告

密码学报告
密码学报告

China University of Geoscience

Name:Nan Zhang

Student ID:20071003820

Class:19207227

Teacher :Wei Ren

Date:December 11 ,2009

Contents

1. Introduction

2. Number Theory Algorithm Implementation

Part

1:Describption------------------------------------------------------------------4

Part 2:Theory

------------------------------------------------------------------------4

Part 3:Solution

-----------------------------------------------------------------------4

Part 4:Design

-------------------------------------------------------------------------4

Part 5: Code

---------------------------------------------------------------------------5

Part 6: Test

----------------------------------------------------------------------------6

3. RSA Encryption Implementation

Part 1:Describption

-------------------------------------------------------------------8

Part 2:Theory

--------------------------------------------------------------------------9

Part 3:Design

--------------------------------------------------------------------------11

Part 4: Code

----------------------------------------------------------------------------11

Part 5: Test

-----------------------------------------------------------------------------16

4. ECC Encryption Implementation

Part 1:Describption

-------------------------------------------------------------------18

Part

2:Theory---------------------------------------------------------------------------18

Part 3:Design

--------------------------------------------------------------------------19

Part 4: Code

----------------------------------------------------------------------------19

Part 5: Test

-----------------------------------------------------------------------------24

5. El Gamal Signature Implementation

Part 1:Describption

-------------------------------------------------------------------28

Part 2:Theory

--------------------------------------------------------------------------28

Part 3:Design

--------------------------------------------------------------------------29

Part 4: Code

----------------------------------------------------------------------------29

Part 5: Test

-----------------------------------------------------------------------------33

6.Acknowledgements

Introduction

As society has evolved,the need for more sophisticated methods of protecting data has increased.Now with the information at hand,the need is more pronounced than ever. Practice makes perfect.In this lab,we will have four problems,which are not so much difficult.

The four problems are Number Theory Algorithm Implementation(CRT problem ), RSA Encryption Implementation, ECC Encryption Implementation and El Gamal Signature Implementation.The aim is to improve our practice skills to solve problems.

This thesis contains at least four parts(Describption/ Theory / Code/ Test) for each problem.And for each test case, the pargram-code runs well without errors in VC6.0++.That is to say programs available for each problem in the thesis.

From this lab,I learn a lot.Sometimes we give up at the first glance,but if we try and just hold the line,then we can get closer to success.Even sometimes the result is not so much perfect.But we do try.

For the sake of my limited knowledge , maybe there exisits inappropriate points.Understanding comes first.

Key-word:CRT RSA ECC ElGamal-Signature

No.1 Number Theory Algorithm Implementation

Part 1:Describption

This is a problem which has four choices depends on your interest.As for me,I choose the problem 1,the Implement CRT algorithm to solve congruence equations.

Part 2:Theory

The Chinese Remainder Theorem

Suppose gcd(m1,m2,……,m k)=1,Given arbitrary integer b1,b2,……,b k,the simultaneous congruences

X≡b1 (mod m1)

…………

X≡b k (mod m k)

there exists exactly one solution x (mod m) to the congruences equation,m=m1m2……m k。

Part 3:Solution

Step1:assume m=m1m2……m k ,m = m i M i , i =1,2,……,k

Step2: compute M i' ,i =1,2,……,k

M i'M i ≡ 1 (mod m i ) , M i =m / m i

Step3:compute x ≡ M1'M1 b1+M2'M2 b2+……+M i'M i b i ( mod m ) Part 4: Design

(1)Main function

(2)Sub_function: int inverse(int a,int b), int CRT(int n)

Part 5: Code

#include"stdio.h"

#include"math.h"

/***************sub_function Design************************ //compute the inverse function

int inverse(int a,int b)

{

int M_inverse;

for(M_inverse=1;M_inverse

{

if((M_inverse*a)%b==1)

return M_inverse;

}

}

//Design a sub_function to solve the conqruence equations using CRT int CRT(int n)

{

int i;

int a[100]={0};

int m[100]={0};

for(i=1;i<=n;i++)//input each equation's 2 parameters

{

printf("please input %dth equation's 2 parameters:",i);

scanf("%d%d",&a[i-1],&m[i-1]);

}

printf("The following is your congruence equation:\n");

for(i=0;i

{

printf(" x=%d (mod %d) \n",a[i],m[i]);

}

int multiply_product=1;//multiply_product=m[0]*……*m[n]

for(i=0;i

{

multiply_product=multiply_product*m[i];

}

printf("multiply_product=%d\n",multiply_product);

int M[100]={0};//M[i]

int N[100]={0};//the value of N[i] is the inverse of M[i]

for(i=0;i

{

M[i]=multiply_product/m[i];

}

for(i=0;i

{

N[i]=inverse(M[i],m[i]);//tansfer the inverse function to compute the inverse }

//compute the value of x

int x=0;

for(i=0;i

{

x=x+M[i]*N[i]*a[i];

}

x=x%multiply_product;

return x;

}

/*************Main Function Design ********************/

int main()

{

int NumOfEquations;//the number of function

int y;

printf("please input the number which the congruence equation contains: \n");

printf("NumOfEquations= ");

scanf("%d",&NumOfEquations);

y=CRT(NumOfEquations);

printf("the result:x=%d ",y);

return 1;

}

Part 6: Test

Test congruence equation :

X ≡ 1 (mod 5)

X ≡ 1 (mod 5)

X ≡ 1 (mod 5)

X ≡ 1 (mod 5)

Step1:input the value of NumOfEquations,NumOfEquations=4

Step2:input each equation's 2 parameters

Step3:press button “Enter”,we get the result:

No.2 RSA Encryption Implementation

Part 1:Describption:

(1)Generate a random number in [2l, 2l+1], test whether it is a Prime number by using Miller-Rabin testing.

(2)Given x and n, use extended Euclidean Algorithm to compute its inverse element y (mod n).

(3)By calling function 1) and 2), generate RSA parameters n=pq, e, and d.

(4)Given message M, encrypt it into M’ by your parameters. Check your encryption is right by decrypt ion M’.

Part 2:Theory

Theory1: Miller-Rabin Testing

Determine if a given number n is prime

(1)write n-1 as 2k m, with m odd

(2)choose a random integer a ,1<=a<=n-1

(3)b a m mod n

(4)if b=1 then return 1

(5)compute b,b2,b4,……,b2^(k-1),if we find -1,return 1

(6)else return 0

Theory2: Extended Euclidean Algorithm

Given a x≡1 ( mod n ),how to find x using this algorithm. Step1: r0=n and r1= a;

Step2:r0=q1+r2 r2=r0-q1r1=-q1r1 mod n

Let x2=-q1 then r2=x2r1 mod n

r1=q2r2+r3r3=r1-q2r2=(1-x2q2)r1 mod n

Let x3=1-x2q2 then r3=x3r1 mod n

……

r n-3=q n-2r n-2+r n-1r n-1=r n-3-q n-2r n-2 mod n

Let x n-1=x n-3-x n-2q n-2 then r n-1=x n-1r1 mod n

Now r n-1=1

Step3:result is x n-2=a-1 mod n

Theory3:Square-and –Multiply Alorithm

Aim:computing x c mod n efficiently

Step1:represent c as bit string c k-1……c0

Step2: z=1

for i=k-1 down to 0 do

z=z2 mod n

if c i=1 then z=z*x mod n

Step3: return z

Theory4:compute GCD using Euclidean Algorithm if gcd(m,n)=1,then m and n are coprime. Euclidean Algorithm:

Step 1:gcd(a,b) = gcd(b,a mod b)

a = k

b + r r = a mod b

Step2: each step,we let b replace a, let ( a mod b) replace b Step3: while b=0,we get gcd=a

Theory5:RSA algorithm

Public key= e,n ;n=pq,gcd(e,(p-1)(q-1))=1 Private key= d,n; n=pq,e d≡1( mod (p-1)(q-1)) We use public key to Encrypt,use private key to decrypt! Step1:Key Generation

1)choose two random primes p and q

2)compute n=p*q

3)compute Φ(n)=(n-1)(q-1)

4)choose an integer e, gcd(Φ(n),e)=1

5)compute d,d=e-1(mod (Φ(n))

6)private key= d,n

public key= e,n

Step2:Encrypt

message m, compute c=m e mod n

Step3:Decrypt

Ciphertext c ,compute m=c d mod n

Part 3:Design

(1)main function

(2)sub_function:

a、int compute(int aa,int bb,int nn)// Square-and –Multiply Alorithm design

b、int Rabin_Miller_test(int N)//Miller-Rabin Testing design

c、int Extended_Euclidean(int aa,int bb)//using Extended_Euclidean to find

inverse

d、int Euclidean(int aa,int bb)//compute gcd(aa,bb)

Part 4:Code

#include"stdio.h"

#include"stdlib.h"

#include"time.h"

/*****************sub-function design************************/

int compute(int aa,int bb,int nn)// Square-and –Multiply Alorithm design

{

int convertedNumber[64];

int numberToConvert;

int index = 0;

numberToConvert=bb;

do

{

convertedNumber[index] = numberToConvert % 2;

++ index;

numberToConvert = numberToConvert / 2;

}while( numberToConvert != 0);

//compute a^b mod n

int c=0;

long int f=1;

for(--index; index >=0; --index)

{

c=c*2;

f=(f*f)%nn;

if(convertedNumber[index]==1)

{

c=c+1;

f=(f*aa)%nn;

}

}

return f;

}

int Rabin_Miller_test(int N)//Miller-Rabin Testing design

{

//write N-1 as a2^k*m,with m odd

int k=0;//compute k

int p;

p=N-1;

while(p%2==0)

{

k++;

p=p/2;

}

//compute m

int m;

int temp=1;

int i;

for(i=0;i

{

temp=temp*2;

}

m=(N-1)/temp;

//printf("n-1=(2^k)*m:thereinto,k=%d;m=%d\n",k,m);

//choose a random integer a,1<

int a;

srand((unsigned)time(NULL)); // let time be the random seed a=rand()%(N-1)+1; // generate random a between 1and N-1 //

int b;

int j;

int w,ww;

b=compute(a,m,N); //conpute a^m mod N,and let b= a^m mod N //test N

if(b==1)

{

//printf("n is a prime\n");

return 1;

}

//compute:b,b^2,b^4,……,b^2^(k-1) mod N

else if(b!=1)

{

if(k==0)

return 0;

else

{

int ii;

int bb;

for(ii=0;ii

{

int g;

if(ii==0)

g=1;

else

{ int h;

g=1;

for(h=0;h

g=g*2;

}

bb=compute(b,g,N);

if(bb==N-1)

{

return 1;

break;

}

else continue;

}

if(bb!=N-1)

return 0;

}

}

}

int Extended_Euclidean(int aa,int bb)//using Extended_Euclidean to find inverse {

int aaa;

int j,q[100],r[100],s[100],t[100];

if(aa>bb)

{

r[0]=aa;

r[1]=bb;

}

else

{

r[0]=bb;

r[1]=aa;

}

s[0]=1;s[1]=0;

t[0]=0;t[1]=1;

for(j=1;j<100;j++)

{

if(r[j]!=0)

{

q[j]=r[j-1]/r[j];

r[j+1]=r[j-1]%r[j];

if(j>1)

{

s[j]=s[j-2]-q[j-1]*s[j-1];

t[j]=t[j-2]-q[j-1]*t[j-1];

}

}

else

{

if(aa>bb)

{

aaa=s[j-1];

}

else aaa=t[j-1];

break;

}

}

if(aaa<0)

aaa+=bb;

return aaa;

}

int Euclidean(int aa,int bb)

{

if(bb==0)

return aa;

else

return Euclidean(bb,aa%bb);

}

/******************Main Function design **********************/ int main()

{

printf("The system Generates a random number in [2^l, 2^l+1]\n");

int l;

int l1=1;

int l2;

printf("please input the value of l:\n");

printf("l=");

scanf("%d",&l);

int i;

for(i=0;i

{

l1=l1*2;

}

l2=l1*2;

printf("l1=%d,l2=%d\n",l1,l2);

int p,q;

srand((unsigned)time(NULL));

p=rand()%(l2-l1+1)+l1;

q=rand()%(l2-l1+1)+l1;

while(!Rabin_Miller_test(p)||!Rabin_Miller_test(q))

{

srand((unsigned)time(NULL));

p=rand()%(l2-l1+1)+l1;

q=rand()%(l2-l1)+l1;

}

printf("p=%d;q=%d\n",p,q);

int n;

n=p*q;

int n1;

n1=(p-1)*(q-1);

int e;

int gcd;

srand((unsigned)time(NULL));

e=rand()%(l2-l1+1)+l1;

gcd=Euclidean(n1,e);//using Euclidean to test wheather gcd=1 while(gcd!=1)

{

srand((unsigned)time(NULL));

e=rand()%(l2-l1+1)+l1;

gcd=Euclidean(n1,e);

}

int d;

d=Extended_Euclidean(e,n1);

printf("the public key is %d:\n",e);

printf("the private key is %d:\n",d);

int M;//message M

printf("please input your message M:\n");

printf("M=");

scanf("%d",&M);

int j,Encode;

Encode=compute(M,e,n);//encrypt

printf("the Encrypted message is %d:\n",Encode);

int Decode;

Decode=compute(Encode,d,n);//decrypt

printf("the Decrypted message is %d:\n",Decode);

return 1;

}

Part 5:Test

Test data: M=3, l=5

Step1:input the value of l , l = 5,

First,we get the range of randon number 32<=l<=64 Sencond,we get two random number p and q

Third,we get the public key and private key

Step2:input the message M=3

then,we get the ciphertext and its decrypted message,we find that the message is the same as the decrypted message,that is to say we successfully achieve RSA cryptogrphy.

No.3 ECC Encryption Implementation

Part 1:Describption

Use VC6.0++to program a Elliptic Curve Cryptography,use the test case given in the lab.

Part 2:Theory

Theory1: Elliptic Curves equation

A elliptic curve is the set E of points (x,y)∈R×R s. t

y2=x3+ax+b a,b∈ R

together with a point O at finity.

Theory2:Addition on Elliptic Curve

Definition:we define a binary operation + on a curve E as:

(1)if P=(x,y),then –P=(x,-y), P+(-P)=O

(2)O servers as the identity (zero), O+P=P+O=P

(3)If Q≠-P∧Q≠O:P+Q=R

P(x P,y P),Q(x Q,y Q),R(x R,y R)

x R=k2-x P-X Q

y R=k(x p-x R)-y P

i)P=Q

k=(3x P2+a)/2y p mod p

ii)P≠Q

k=(y q-y p)/(x q-x p) mod p

Theory3:Elliptic Curve Cryptography

Step1: select suitable curve & point G s.t. n×G=O

Step2:choose private key n A

Step3:compute P A=n A×G

Step4:encode message m as a point P m

Step5:Encrypt P m:

C m= kG,P m+kP A

Part 3:Design

(1)main function

(2)sub_function

a、int Extended_Euclidean(int aa,int bb)//compute gcd(aa,bb)

b、int add_EC(int x1,int y1,int x2,int y2,int aa,int pp)//compute P+Q Part 4:Code

#include"stdio.h"

#include"stdlib.h"

#include"time.h"

int x3,y3;//P+Q=(x3,y3)

int Extended_Euclidean(int aa,int bb)

{

int aaa;

int j,q[100],r[100],s[100],t[100];

if(aa>bb)

{

r[0]=aa;

r[1]=bb;

}

else

{

r[0]=bb;

r[1]=aa;

}

s[0]=1;s[1]=0;

t[0]=0;t[1]=1;

for(j=1;j<100;j++)

{

现代密码学实验报告

现代密码学 实验报告 学生姓名 学号 专业班级计算机科学与技术指导教师段桂华 学院信息科学与工程学院完成时间2016年4月

实验一密码算法实验 [实验目的] 1.掌握密码学中经典的对称密码算法AES、RC4的算法原理。 2.掌握AES、RC4的算法流程和实现方法。 [实验预备] 1.AES算法的基本原理和特点。 2.流密码RC4的密钥流生成以及S盒初始化过程。 [实验内容] 1. 分析AES、RC4的实现过程。 2. 用程序设计语言将算法过程编程实现。 3. 完成字符串数据的加密运算和解密运算 输入十六进制明文:11223344556677889900AABBCCDDEEFF 输入十六进制密钥:13579BDF02468ACE1234567890ABCDEF [实验步骤] 1. 预习AES、RC4算法。 2. 写出算法流程,用程序设计语言将算法过程编程实现。 3. 输入指定的明文、密钥进行实验,验证结果。 4. 自己选择不同的输入,记录输出结果。 写出所编写程序的流程图和运行界面、运行结果。 一、AES算法 1、AES算法简介 AES 是一种可用来保护电子数据的新型加密算法。特别是,AES 是可以使用128、192 和 256 位密钥的迭代式对称密钥块密码,并且可以对 128 位(16 个字节)的数据块进行加密和解密。与使用密钥对的公钥密码不同的是,对称密钥密码使用同一个密钥来对数据进行加密和解密。由块密码返回的加密数据与输入数据具有相同的位数。迭代式密码使用循环结构来针对输入数据反复执行排列和置换运算。 2、算法实现及流程 以加密函数为例,如下所示,首先对密钥进行预处理密钥扩展,然后明文进行Nr(Nr与密钥长度有关)次迭代运算,包括字节替换SubBytes、移位行运算ShiftRows、混合列运算MixColumns、以及轮秘钥加密AddRoundKey。

密码学实验报告

密码学实验报告 学院:计算机科学与技术 班级: 学号: 姓名: 指导老师:

密码学 实验日志 实验题目: DES (或AES )分组密码 实验目的: 熟悉分组密码加解密算法的基本原理,加深对所提供的部分源程序的理解; 分组密码将明文分成一组一组,在密钥的控制下,经过加密变换生成一组一组的密文。具体而言,分组密码就是将明文消息序列 ,,,,21i m m m 划分成等长的消息组 ),,,,(),,,,(22121n n n n m m m m m m ++在密钥t k k k k ,,,21 =的控制下按固定的加密算法一组一 组进行加密,输出一组一组密文 ),,,,(),,,,(22121l l l l c c c c c c ++。 下面的实验以DES 算法为例,DES 算法明文分组长为64bit ,加密后得到64bit 的密文,输入初始种子密钥为64bit ,第8、16、24、32、40、48、56、64为奇偶校验位,实际的密钥长为56bit 。DES 加密过程由三个阶段来完成: (1) 初始置换IP ,用于重排明文分组的64bit 数据; (2) 相同结构的16轮迭代,每轮中都有置换和代换运算,第16轮变换的输出分为左右两半,并交换次序。 (3) 逆初始置换IP -1 (为IP 的逆)后,产生64bit 的密文。 实验要求: (1) Windows 系列操作系统; (2) VC6.0编程环境。 (3) 提交完整的程序代码清单和详细的注释; (4) 要求有程序运行结果显示。当加密成功时,得到密文;输入相同的密钥,能将密文恢复成明文。 实验主要步骤: (1) 熟悉分组密码加解密算法的基本原理,加深对所提供的部分源程序的理解; (2) 分析源程序中密码算法的加解密和子密钥生成等典型模块的主要功能,并对源程序加上注释; (3) 在已提供的部分源程序的基础上,添加源程序省缺的部分; (4) 对给定的消息分组进行加解密运算和验证。 源代码: #include #include #include typedef bool (*PSubKey)[16][48]; enum {ENCRYPT,DECRYPT}; //选择:加密;解密 static bool SubKey[2][16][48]; // 16圈子密钥 static bool Is3DES; // 3次DES 标志 static char Tmp[256], deskey[16]; //暂存字符串,密钥串

密码学课程设计-刘欣凯

现代密码学实验 题目:2012现代密码学实验 姓名:刘欣凯学号:192102-21 院(系):计算机学院专业:信息安全指导教师:任伟职称:副教授 评阅人:职称: 2012 年12 月

现代密码学实验原创性声明 本人以信誉声明:所呈交的现代密码学实验是在导师指导下进行的研究工作及取得的研究成果,论文中引用他人的文献、数据、图件、资料均已明确标注出,论文中的结论和结果为本人独立完成,不包含他人成果及为获得中国地质大学或其他教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示了谢意。 毕业论文作者(签字):刘欣凯 签字日期:2012年12 月18 日 学校代码:10491 本科生学号:20101003356

现代密码学实验 本科生:刘欣凯 学科专业:信息安全 指导老师:任伟 二〇一二年十二月

目录 实验一古典密码算法 (5) 1.1 仿射密码 (5) 1.11 算法原理和设计思路 (5) 1.12 关键算法分析 (5) 1.13运行结果 (7) 1.2古典密码hill (8) 1.21古典密码hill概述 (8) 1.22 算法原理和设计思路 (8) 1.23 关键算法分析 (9) 1.24 运行结果 (10) 1.25 密码安全性分析 (10) 1.3古典密码Vegenere (12) 1.31古典密码Vegenere概述 (12) 1.32算法原理和设计思路 (12) 1.33 关键算法分析 (12) 1.34 运行结果 (13) 1.35密码安全性分析 (14) 1.4古典密码Playfair (15) 1.41古典密码Playfair概述 (15) 1.42算法原理和设计思路 (15) 1.43 运行结果 (17) 1.44 密码安全性分析 (17) 实验二ElGamal签名体制 (18) 2.1 ElGamal签名概述 (18) 2.2算法原理和设计思路 (18) 2.3关键算法分析 (20) 2.4运行结果 (20) 实验三 Rabin加密和签名 (21)

《现代密码学》读书报告

《现代密码学》读书报告

目录 一、文献的背景意义、研究目的、核心思想 (3) 二、国内外相关研究进展 (5) 现代密码学的产生 (5) 近代密码学的发展 (6) 三、文献所提方法(或算法、方案)的主要步骤或过程 (7) 对称加密算法 (7) 公开密钥算法 (7) 四、文献所提方法的优缺点 (8) 对称加密算法的优点和缺点: (8) 五、文献所提方法与现有方法的功能与性能比较 (9) 对称算法与公钥算法的比较: (9) 六、文献所提方法的难点或关键点 (10) 七、阅读中遇到的主要障碍 (10) 八、阅读体会 (11) 九、参考文献 (11)

一、文献的背景意义、研究目的、核心思想 密码学(Cryptography)在希腊文用Kruptos(hidden)+graphein(to write)表达,现代准确的术语为“密码编制学”,简称“编密学”,与之相对的专门研究如何破解密码的学问称之为“密码分析学”。密码学是主要研究通信安全和保密的学科,他包括两个分支:密码编码学和密码分析学。密码编码学主要研究对信息进行变换,以保护信息在传递过程中不被敌方窃取、解读和利用的方法,而密码分析学则于密码编码学相反,它主要研究如何分析和破译密码。这两者之间既相互对立又相互促进。密码的基本思想是对机密信息进行伪装。一个密码系统完成如下伪装:加密者对需要进行伪装机密信息(明文)进行伪装进行变换(加密变换),得到另外一种看起来似乎与原有信息不相关的表示(密文),如果合法者(接收者)获得了伪装后的信息,那么他可以通过事先约定的密钥,从得到的信息中分析得到原有的机密信息(解密变换),而如果不合法的用户(密码分析者)试图从这种伪装后信息中分析得到原有的机密信息,那么,要么这种分析过程根本是不可能的,要么代价过于巨大,以至于无法进行。 “密码”一词对人们来说并不陌生,人们可以举出许多有关使用密码的例子。如保密通信设备中使用“密码”,个人在银行取款使用“密码”,在计算机登录和屏幕保护中使用“密码”,开启保险箱使用“密码”,儿童玩电子游戏中使用“密码”等等。这里指的是一种特定的暗号或口令字。现代的密码已经比古代有了长远的发展,并逐渐形成一门科学,吸引着越来越多的人们为之奋斗。 从专业上来讲,密码是通信双方按约定的法则进行信息特殊变换的一种重要保密手段。依照这些法则,变明文为密文,称为加密变换;变密文为明文,称为脱密变换。密码在早期仅对文字或数码进行加、脱密变换,随着通信技术的发展,对语音、图像、数据等都可实施加、脱密变换。 为了研究密码所以就有了密码学。密码学是研究编制密码和破译密码的技术科学。研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学;应用于破译密码以获取通信情报的,称为破译学,总称密码学。 进行明密变换的法则,称为密码的体制。指示这种变换的参数,称为密钥。它们是密码编制的重要组成部分。密码体制的基本类型可以分为四种:错乱——按照规定的图形和线路,改变明文字母或数码等的位置成为密文;代替——用一

杭电密码学DES密码实验报告

课程实验报告 课程密码学实验 学院通信工程学院 专业信息安全 班级14083611 学号14084125 学生姓名刘博 实验名称DES密码实验 授课教师胡丽琴

DES密码实验 一、实验要求: 1、了解分组密码的起源与涵义。 2、掌握DES密码的加解密原理。 3、用Visual C++实现DES密码程序并输出结果。 二、实验内容: 1、1949年,Shannon发表了《保密系统的通信理论》,奠定了现代密码学的基础。他还指出混淆和扩散是设计密码体制的两种基本方法。扩散指的是让明文中的每一位影响密文中的许多位,混淆指的是将密文与密钥之间的统计关系变得尽可能复杂。而分组密码的设计基础正是扩散和混淆。在分组密码中,明文序列被分成长度为n的元组,每组分别在密钥的控制下经过一系列复杂的变换,生成长度也是n的密文元组,再通过一定的方式连接成密文序列。 2、DES是美国联邦信息处理标准(FIPS)于1977年公开的分组密码算法,它的设计基于Feistel对称网络以及精心设计的S盒,在提出前已经进行了大量的密码分析,足以保证在当时计算条件下的安全性。不过,随着计算能力的飞速发展,现如今DES已经能用密钥穷举方式破解。虽然现在主流的分组密码是AES,但DES的设计原理仍有重要参考价值。在本实验中,为简便起见,就限定DES 密码的明文、密文、密钥均为64bit,具体描述如下: 明文m是64bit序列。 初始密钥K是64 bit序列(含8个奇偶校验bit)。 子密钥K1, K2…K16均是48 bit序列。 轮变换函数f(A,J):输入A(32 bit序列), J(48 bit序列),输出32 bit序列。 密文c是64 bit序列。 1)子密钥生成: 输入初始密钥,生成16轮子密钥K1, K2 (16) 初始密钥(64bit)经过置换PC-1,去掉了8个奇偶校验位,留下56 bit,接着分成两个28 bit的分组C0与D0,再分别经过一个循环左移函数LS1,得到C1与D1,连成56 bit数据,然后经过置换PC-2,输出子密钥K1,以此类推产生K2至K16。

实验报告_密码学

信息安全实验报告 学号: 学生姓名: 班级:

实验三密码学实验 一、古典密码算法实验 一、实验目的 通过编程实现替代密码算法和置换密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础。 二、编译环境 运行windows 或linux 操作系统的PC 机,具有gcc(linux)、VC (windows)等C语言编译环境。 三、实验原理 古典密码算法历史上曾被广泛应用,大都比较简单,使用手工和机械操作来实现加密和解密。它的主要应用对象是文字信息,利用密码算法实现文字信息的加密和解密。下面介绍两种常见的具有代表性的古典密码算法,以帮助读者对密码算法建立一个初步的印象。 1.替代密码 替代密码算法的原理是使用替代法进行加密,就是将明文中的字符用其它字符替代后形成密文。例如:明文字母a、b、c、d ,用D、E、F、G做对应替换后形成密文。 替代密码包括多种类型,如单表替代密码、多明码替代密码、多字母替代密码、多表替代密码等。下面我们介绍一种典型的单表替代密码,恺撒(caesar)密码,又叫循环移位密码。它的加密方法,就是将明文中的每个字母用此字符在字母表中后面第k个字母替代。它的加密过程可以表示为下面的函数:E(m)=(m+k) mod n 其中:m 为明文字母在字母表中的位置数;n 为字母表中的字母个数;k 为密钥;E(m)为密文字母在字母表中对应的位置数。例如,对于明文字母H,其在字母表中的位置数为8,设k=4,则按照上式计算出来的密文为L:E(8) = (m+k) mod n = (8+4) mod 26 = 12 = L

2.置换密码 置换密码算法的原理是不改变明文字符,只将字符在明文中的排列顺序改 变,从而实现明文信息的加密。置换密码有时又称为换位密码。 矩阵换位法是实现置换密码的一种常用方法。它将明文中的字母按照给的 顺序安排在一个矩阵中,然后用根据密钥提供的顺序重新组合矩阵中字母,从而 形成密文。例如,明文为attack begins at five,密钥为cipher,将明文按照每行 6 列的形式排在矩阵中,形成如下形式: a t t a c k b e g i n s a t f i v e 根据密钥cipher中各字母在字母表中出现的先后顺序,给定一个置换: 1 2 3 4 5 6 f = 1 4 5 3 2 6 根据上面的置换,将原有矩阵中的字母按照第 1 列,第 4 列,第 5 列,第 3 列, 第2列,第 6 列的顺序排列,则有下面形式: a a c t t k b i n g e s a I v f t e 从而得到密文:abatgftetcnvaiikse 其解密的过程是根据密钥的字母数作为列数,将密文按照列、行的顺序写出,再根据由密钥给出的矩阵置换产生新的矩阵,从而恢复明文。 四、实验内容和步骤 1、根据实验原理部分对替代密码算法的介绍,自己创建明文信息,并选择 一个密钥k,编写替代密码算法的实现程序,实现加密和解密操作。 2、根据实验原理部分对置换密码算法的介绍,自己创建明文信息,并选择一个密钥,编写置换密码算法的实现程序,实现加密和解密操作。 五、总结与思考 记录程序调试过程中出现的问题,分析其原因并找出解决方法。记录最终实现的程序执行结果。

密码学课程设计设计

2009年密码学暑期课程设计说明 姓名:张志佳学号:072337 下面分别是AuthorityServer服务器端,ClientGUI客户端,以及ProviderGUI 提供者端得三张主界面的截图: 1.AuthorityServer服务器端: 2.ClientGUI客户端:

3.ProviderGUI提供者端:

本软件的总体介绍: 平时,我们在上网时,经常会从网上面下载一些资源,有时要注册为XX 网站的用户才能够下载网站的资源,本软件就是实现的这样一系列功能的演示软件,因为演示软件,因此讲很多东西都做到了软件的外面,看起来很繁琐,其实,你如果按照下面的操作说明,按步骤执行还是很简单的。 本软件,并没有做用户的注册这一模块,而是将预先将一张用户列表存在服务器端,用户必须用列表中的用户名,才能够登录服务器成功,并且如果你的用户密码不正确,也不能获得正确的资源密文。 资源的加密加密是采用现在还是很安全的DES加密算法实现,在传输过程中,对数据进行MAC认证,来确认数据是否,本修改过。 可能会遇到的问题: 问题1. 有可能你在按下某一个按钮时,会出现如下的提示信息,如图示: 解决方法:这是因为你将.exe 程序从根目录中拿到外面了,程序中需要在根目录下载入.txt 文件。因此建议测试者请不要将exe程序拿到外面测试,如果拿到外面测试,请将根目录中的“name.txt”和“密码学课程设计软件说明.chm”文件一起复制出来,从而使程序能够正常的运行。 问题 2.在执行客户端应用程序时,可能你在点击Client客户端界面上的“获取密钥”按钮时,界面会出现卡住的现象,

华科大密码学课程设计实验报告

密码学课程设计实验报告 专业:信息安全 班级:0903 姓名:付晓帆 学号:U200915328

一、 DES 的编程实现 1.实验目的 通过实际编程掌握DES 的加、脱密及密钥生成过程,加深对DES 算法的认识。 2.实验原理 a.加密过程 DES 是一个分组密码,使用长度为56比特的密钥加密长度为64比特的明文,获得长度为64比特的密文,其加密过程: (1) 给定一个明文X ,通过一个固定的初始置换IP 置换X 的比特,获得X0,X0=IP(X)=L0R0,L0R0分别是X0的前32比特和后32比特。 (2) 然后进行16轮完全相同的运算,有如下规则,其中0

(完整版)密码学学习心得

密码学认识与总结 专业班级信息112 学号201112030223 姓名李延召报告日期. 在我们的生活中有许多的秘密和隐私,我们不想让其他人知道,更不想让他们去广泛传播或者使用。对于我们来说,这些私密是至关重要的,它记载了我们个人的重要信息,其他人不需要知道,也没有必要知道。为了防止秘密泄露,我们当然就会设置密码,保护我们的信息安全。更有甚者去设置密保,以防密码丢失后能够及时找回。密码”一词对人们来说并不陌生,人们可以举出许多有关使用密码的例子。现代的密码已经比古代有了长远的发展,并逐渐形成一门科学,吸引着越来越多的人们为之奋斗。 一、密码学的定义 密码学是研究信息加密、解密和破密的科学,含密码编码学和密码分析学。 密码技术是信息安全的核心技术。随着现代计算机技术的飞速发展,密码技术正在不断向更多其他领域渗透。它是集数学、计算机科学、电子与通信等诸多学科于一身的交叉学科。使用密码技术不仅可以保证信息的机密性,而且可以保证信息的完整性和确证性,防止信息被篡改、伪造和假冒。目前密码的核心课题主要是在结合具体的网络环境、提高运算效率的基础上,针对各种主动攻击行为,研究各种可证安全体制。 密码学的加密技术使得即使敏感信息被窃取,窃取者也无法获取信息的内容;认证性可以实体身份的验证。以上思想是密码技术在信息安全方面所起作用的具体表现。密码学是保障信息安全的核心;密码技术是保护信息安全的主要手段。 本文主要讲述了密码的基本原理,设计思路,分析方法以及密码学的最新研究进展等内容 密码学主要包括两个分支,即密码编码学和密码分析学。密码编码学对信息进行编码以实现信息隐藏,其主要目的是寻求保护信息保密性和认证性的方法;密码分析学是研究分析破译密码的学科,其主要目的是研究加密消息的破译和消息的伪造。密码技术的基本思想是对消息做秘密变换,变换的算法即称为密码算法。密码编码学主要研究对信息进行变换,以保护信息在传递过程中不被敌方窃取、解读和利用的方法,而密码分析学则于密码编码学相反,它主要研究如何分析和破译密码。这两者之间既相互对立又相互促进。密码的基本思想是对机密信

密码学实验报告模板总结模板计划模板.doc

密码学应用与实践课程实验报告 实验 1:实现 DES密码体制 一、实验目的 1.编写程序实现 DES的加、解 密:1)编程构造 DES的密钥; 2)应用上述获得的密钥将一段英文或文件进行加、解密。 2.用 DES算法实现口令的安全 二、实验内容 1.DES原理 DES综合运用了置换,代换,移位多种密码技术,是一种乘积密码。在算法结构上采用迭代 结构,从而使其结构清晰,调理清楚,算法为对合运算,便于实现,运行速度快。DES使用了初始置换IP 和 IP-1 各一次(相应的置换看算法描述图表)置换P16 次,安排使用这 3 个置换的目的是把数据彻底打乱重排。选择置换 E 一方面把数据打乱重排,另一方面把32 位输入扩展为48 位,算法中除了S- 盒是非线性变换外,其余变换均为显示变换,所以保密 的关键是选择S- 盒。符合以下 3 条准则: (1)对任何一个 S- 盒而言,没有任何线性方程式等价于此S-盒的输出输入关系,即是S- 盒是非线性函数。 (2)改变 s- 盒的任何一位输入,都会导致两位以上的输出改变,即满足" 雪崩效应 " 。(3)当固定某一个位的输入时,S- 盒的 4 个出位之间,其中0 和 1 的个数之差小。这个准 则的本质是数据压缩,把四位输入压缩为 4 位输出。选择 S-盒函数的输入中任意改变数位, 其输出至少变化两位。因为算法中使用了16 次迭代,大大提高了保密性。 2.DES算法由加密、解密和子密钥的生成三部分组成 1)加密 DES算法处理的数据对象是一组64 比特的明文串。设该明文串为m=m1m2m64 (mi=0 或 1) 。明文串经过64 比特的密钥K 来加密,最后生成长度为64 比特的密文E。其加密过程图示如下:

密码学课程设计

一、设计题目 随机数产生器应用系统 二、课题要求 系统功能要求: 1)模拟线性移位寄存器、线性同余发生器等产生伪随机数,并比较算法性能以及伪随机数的随机性; 2)利用该模拟随机数,应用到口令认证系统中,完成口令的生产、口令的加密保护、登陆验证等功能; 3)利用该模拟随机数,应用到密钥生成系统中,可以利用该密钥完成对称密钥的加密和解密功能。 三、系统设计和模块设计 1.总体设计思路 利用线性同余发生器(LCG)和线性反馈移位寄存器(LFSR)生成伪随机数M序列,并通过口令认证系统完成口令生成加密工作,同时完成对随机数的加密和解密功能。 2.模块设计思路 2.1原理 通过一定的算法对事先选定的随机种子(seed)做一定的运算可以得到一组人工生成的周期序列,在这组序列中以相同的概率选取其中一个数字,该数字称作伪随机数,由于所选数字并不具有完全的随机性,但是从实用的角度而言,其随机程度已足够了。这里的“伪”的含义是,由于该随机数是按照一定算法模拟产生的,

其结果是确定的,是可见的,因此并不是真正的随机数。伪随机数的选择是从随机种子开始的,所以为了保证每次得到的伪随机数都足够地“随机”,随机种子的选择就显得非常重要,如果随机种子一样,那么同一个随机数发生器产生的随机数也会一样。 2.2线性同余算法生成随机数 到目前为止,使用最为广泛的随机数产生技术是由Lehmer首先提出的称为线性同余算法,即使用下面的线性递推关系产生一个伪随机数列x1,x2,x3,… 这个算法有四个参数,分别是: a 乘数 0 ≤ a < m c 增量 0 ≤ c< m m 模数 m > 0 ≤ x0 < m x0 初始种子(秘密) 0 伪随机数序列{ xn}通过下列迭代方程得到: xn+1=(axn+c)modm 如果m、a、c和x0都是整数,那么通过这个迭代方程将产生一系列的整数,其中每个数都在0 ≤ xn < m的范围内。数值m、a和c的选择对于建立一个好的伪随机数产生器十分关键。为了形成一个很长的伪随机数序列,需要将m设置为一个很大的数。一个常用准则是将m选为几乎等于一个给定计算机所能表示的最大非负整数。因而,在一个32位计算机上,通常选择的m值是一个接近或等于231的整数。此外,为了使得随机数列不易被重现,可以使用当前时间的毫秒数作为初始种子的位置。 2.2 线性反馈移位寄存器生成随机数 LFSR是指给定前一状态的输出,将该输出的线性函数再用作输入的线性寄存器。异或运算是最常见的单比特线性函数:对寄存器的某些位进行异或操作后作为输入,再对寄存器中的各比特进行整体移位。赋给寄存器的初始值叫做“种子”,因为线性反馈移位寄存器的运算是确定性的,所以,由寄存器所生成的数据流完全决定于寄存器当时或者之前的状态。而且,由于寄存器的状态是有

现代密码学-RC4校验 实验报告

现代密码学 实 验 报 告 院系:理学院 班级:信安二班 姓名: 学号:

前言 密码学(Cryptology)是研究秘密通信的原理和破译秘密信息的方法的一门学科。密码学的基本技术就是对数据进行一组可逆的数学变换,使未授权者不能理解它的真实含义。密码学包括密码编码学(Cryptography)和密码分析学(Cryptanalyst)两个既对立又统一的主要分支学科。研究密码变化的规律并用之于编制密码以保护信息安全的科学,称为密码编码学。研究密码变化的规律并用之于密码以获取信息情报的科学,称为密码分析学,也叫密码破译学。 密码学在信息安全中占有非常重要的地位,能够为信息安全提供关键理论与技术。密码学是一门古老而深奥的学问,按其发展进程,经历了古典密码和现代密码学两个阶段。现代密码学(Modern Cryptology)通常被归类为理论数学的一个分支学科,主要以可靠的数学方法和理论为基础,为保证信息的机密性、完整性、可认证性、可控性、不可抵赖性等提供关键理论与技术。

RC4密码算法算法实现 实验目的: 理解流密码的概念及相关结构; 理解并能够编写基本的流密码体制; 熟练应用C/C++编程实现RC4密码算法体制。 实验内容: 编程实现RC4加/解密算法。 实验原理: RC4算法是一种序列密码体制或称流密码体制,其加密密钥和解密密钥相同RC4的 密钥长度可变,但为了确保哪去安全强度,目前RC4至少使用128位的密钥。 用1~256个字节(8~2048位)的可变长度密钥初始化一个256个字节的状态向量S,S的元素记为S[0],S[1],…,S[255],从始至终置换后的S包含从0到255的所有8位数。对于加密和解密,字节K是从S的255个元素中按一种系统化的方式选出的一个元素生成的。每生成一个K的值,S中的元素个体就被重新置换一次。 实验代码: Encrypt.h文件: #ifndef _ENCRYPT_RC4_ #define _ENCRYPT_RC4_ #include

密码学课程设计

信息安全技术应用实践 课程设计报告 设计题目信息的安全传递 专业名称: 班级: 学号: 姓名: 指导教师: 2014年7月

目录 一、引言 (3) 二、设计方案 (3) 1.安全需求 (3) 2.概要设计 (3) 3.详细设计 (5) 三、安全性分析........................................................................................................... 错误!未定义书签。 四、运行结果 (8) 五、总结 (8) 参考文献 (11)

一、引言 对于信息安全问题,经常出现QQ被盗号骗取财物等案件的出现。信息的安全性十分重要,尤其是一些个人的隐私。 人们也越来越重视信息的安全传递,所以设计出一个安全传递信息的系统刻不容缓。所以在此次课程设计我设计了一个信息传递系统,此系统是基于JAVA应用程序开发的,结合密码学的加密算法实现。其主要特性是安全的完成信息的传递。 二、设计方案 1.安全需求 1).服务器端每一客户口令安全存储(口令保护) 2).对所有通信内容用分组密码以计数器模式进行加密 3).对所有的通信内容用认证码(MAC)进行完整性检验 4).服务器对每个客户进行身份认证 5).服务器端抗重放攻击 2概要设计 1. (BrokerGUI) 发送代理端代替发送者进行内部操作,它设置了与服务端的共享密钥、实现共享口令的加密密钥的加密、随机密钥的加密,、文件的加密、消息的验证。 工作进程:

假设口令“sharedPwd”为代理与授权服务器共享口令 1)用“sharedPwd”生成加密密钥“K-BC”,以及MAC密钥“K-MAC” 2)随机生成一个密钥“K”;并且用“K”生成一个新的加密密钥“K-temp” 和一个新的MAC密钥“K-MAC-temp”。 3)对输入文件内容进行加密和计算MAC E[ K-temp, file contents ] || MAC[ K-MAC-temp, E[ K-temp, file contents ] ] 4)对新的密钥“K”进行加密和计算MAC E[ K-BC, K ] || MAC[ K-MAC, E[ K-BC, K ] ] 5)输出所有上述信息 2.(BrokerClient) 接收代理端应该设置自己的用户名和密码,且要发防重放的随机数。与服务器端建立通信通道,向服务器端发送加密后的信息。对方接收来自服务器的信息。 相对服务器而言,接收端的任务主要就是保证消息的安全性、保密性、完整性等。 1)用“用户口令”生成加密密钥“K-BC-user”,以及MAC密钥“K-MAC-user1”; 2)接收端提供给服务器 R ||user1 || MAC[ K-MAC-user1, R || user1 ] 这里R是一个随机数,user1为用户名 3)接收端从服务器获得 E[ K-BC-user1, K ] || MAC[ K-MAC-user1, E[ K-BC-user1, K ] ] 解密得“K”,并计算出加密密钥“K-temp”和 一个新的MAC密钥“K-MAC-temp”。 解密和验证“file contents”。 3.AuthorityServer) 服务端实现发送代理端和接收代理端之间的连接,是一个中转站。服务器接受和发送的信息都是加密的,保证了消息的安全性。 服务端实现对了发送代理端的消息认证,实现接收代理端的用户身份认证,对密钥的解密和加密,实现了防重放攻击。 工作进程:

密码学实验报告(AES,RSA)

华北电力大学 实验报告| | 实验名称现代密码学课程设计 课程名称现代密码学 | | 专业班级:学生姓名: 学号:成绩: 指导教师:实验日期:

[综合实验一] AES-128加密算法实现 一、实验目的及要求 (1)用C++实现; (2)具有16字节的加密演示; (3)完成4种工作模式下的文件加密与解密:ECB, CBC, CFB,OFB. 二、所用仪器、设备 计算机、Visual C++软件。 三. 实验原理 3.1、设计综述 AES 中的操作均是以字节作为基础的,用到的变量也都是以字节为基础。State 可以用4×4的矩阵表示。AES 算法结构对加密和解密的操作,算法由轮密钥开始,并用Nr 表示对一个数据分组加密的轮数(加密轮数与密钥长度的关系如表2所示)。AES 算法的主循环State 矩阵执行1 r N 轮迭代运算,每轮都包括所有 4个阶段的代换,分别是在规范中被称为 SubBytes(字节替换)、ShiftRows(行位移变换)、MixColumns(列混合变换) 和AddRoundKey ,(由于外部输入的加密密钥K 长度有限,所以在算法中要用一个密钥扩展程序(Keyexpansion)把外部密钥 K 扩展成更长的比特串,以生成各轮的加密和解密密钥。最后执行只包括 3个阶段 (省略 MixColumns 变换)的最后一轮运算。 表2 AES 参数 比特。

3.2、字节代替(SubBytes ) AES 定义了一个S 盒,State 中每个字节按照如下方式映射为一个新的字节:把该字节的高4位作为行值,低4位作为列值,然后取出S 盒中对应行和列的元素作为输出。例如,十六进制数{84}。对应S 盒的行是8列是4,S 盒中该位置对应的值是{5F}。 S 盒是一个由16x16字节组成的矩阵,包含了8位值所能表达的256种可能的变换。S 盒按照以下方式构造: (1) 逐行按照升序排列的字节值初始化S 盒。第一行是{00},{01},{02},…,{OF}; 第二行是{10},{l1},…,{1F}等。在行X 和列Y 的字节值是{xy}。 (2) 把S 盒中的每个字节映射为它在有限域GF(k 2)中的逆。GF 代表伽罗瓦域,GF(82) 由一组从0x00到0xff 的256个值组成,加上加法和乘法。 ) 1(] [2)2(3488++++= x x x x X Z GF 。{00}被映射为它自身{00}。 (3) 把S 盒中的每个字节记成),,,,,,,,(012345678b b b b b b b b b 。对S 盒中每个字节的每位 做如下变换: i i i i i i c b b b b b i b ⊕⊕⊕⊕⊕='++++8mod )7(8mod )6(8mod )5(8mod )4( 上式中i c 是指值为{63}字节C 第i 位,即)01100011(),,,,,,,,(012345678=c c c c c c c c c 。符号(')表示更新后的变量的值。AES 用以下的矩阵方式描述了这个变换: ?? ? ?? ? ? ? ? ? ??? ? ????????????+???????????????????????????????????????? ????????????=??????????????????????????0110001111111000011111000011111000011111100011111100011111100011111100017654321076543210b b b b b b b b b b b b b b b b 最后完成的效果如图:

密码学实验报告总结

密码学实验报告(本文档为Word版本,下载后可自由编辑) 项目名称:××××××××× 项目负责人:××× 联系电话:××××× 编制日期:×××××

密码学实验报告 实验目的:掌握Caesar密码加密解密原理,并利用VC++编程实现。 实验内容:Caesar密码的加密原理是对明文加上一个密钥(偏移值)而得到密文。假设密钥为3,那么字母“a”对应的ASCII码为97,加上3得100正好是字母“d”的ASCII码值, 实验说明:加密实现的两种方式,只限定英文字母(区分大小写),加密时,根据明文字符是小(大)写字母,采用加密运算: 密文字符=“a”或“A”+(明文字符-“a”或“A”+password%26+26)%26 如果输入其他字符,则直接原样输出,不作处理 可以是任意字符 加密时,我们不做任何区分,直接利用Caesar密码算法 密文字符=明文字符+password 解密反之。 实验结果: void CCaesarDlg::OnButton1() //加密按钮 { UpdateData(TRUE); //从界面上的输入的值传入成员变量 m_crypt=m_plaintxt; //密文进行初始化,它与明文的长度是相同的 for(int i=0;i=48&&m_plaintxt.GetAt(i)<=57) //如果输入的字符是数字 { m_crypt.SetAt(i,'0'+(m_plaintxt.GetAt(i)-'0'+m_password%10 +10)%10);

现代密码学学习报告

现代密码学学习报告 第一章 概论 1.1信息安全与密码技术 信息的一般定义属于哲学范畴。信息是事物运动的状态与方式,是事物的一种区别于物质与能量的属性。 “信息”——数据。 机密性——拥有数据的一方或交换数据的各方不希望局外人或对手获得、进而读懂这些数据。 完整性——数据在交换及保存中不被未授权者删除或改动,或者合法的接受者能方便的判断该数据是否已经被篡改。 认证性——也称“不可否认性”或“抗抵赖”,包括信息源和接收端认证性,即信息系统中的实体不能否认或抵赖曾经完成的发送消息或接收消息的操作。利用信息源证据可以检测出消息发送方否认已发送某消息的抵赖行为,利用接收端证据可以检测出消息接收方否认已接收某消息的抵赖行为。此类证据通常还包括时间/时序或“新鲜性”证据。 可用性——授权用户能对信息资源有效使用。显然,信息系统可靠性是其支撑之一。 公平性——信息具有的社会或经济价值只能在交互中体现。公平性就是指交换规则或交互协议要使得参与信息交互的各方承担安全风险上处于相同或相当的地位。 可控性——是指对信息的传播及传播的内容以至信息的机密性具有控制能力的特性。一般指信息系统或(社会)授权机构根据某种法规对信息的机密性、信息的传播通道、特定内容信息的传播具有控制能力的特性,以及获取信息活动审计凭证能力的特性,如“密钥托管”、“匿名撤销”、实时内容检测与过滤、计算机犯罪或诉讼的司法取证等。 1.2密码系统模型和密码体制 密码系统基本模型: 密码体制的分类:对称密码体制的古典算法有简单代换、多名代换、多表代换等。 非对称密码体制:使用非对称密码体制的每一个用户一个是可以公开的,称为公开密钥,简称公钥,用pku 表示;另外一个则是秘密的,称为秘密秘钥,简称私钥,用sku 表示。非对称密码体制又称为双钥密码体制或公钥密码体制。 公钥密码体制的主要特点是将加密能力分开并分别并分别授予不同的用户,因而可以实现信 源M 加密器() c m =1k E 非法接入者密码分析员 (窃听者)搭线信道 (主动攻击) 搭线信道(被动攻击)解密器接收者 ()m c =2k D 密钥源密钥源1K 2 K m m 'm c ' c 1 k 2k 信道密钥信道

密码学课程设计(格式)2016

南京航空航天大学 课程设计报告 课程名称密码学课程设计 学院计算机科学与技术年级2014 学生姓名陶超权学号161420330 开课时间2016 至2017 学年第一学期

一、实验目的 通过实现简单的古典密码算法,理解密码学的相关概念如明文(plaintext )、密文(ciphertext )、加密密钥(encryption key )、解密密钥(decryption key )、加密算法(encryption algorithm)、解密算法(decryption algorithm )等。 二、实验内容 1)用C\C++语言实现单表仿射(Affine )加/解密算法; 2)用C\C++语言实现统计26个英文字母出现频率的程序; 3)利用单表仿射加/解密程序对一段较长的英文文章进行加密,再对明文和密文中字母出现的频率进行统计并作对比,观察有什么规律。 仿射变换: 加密:()26mod )(21m k k m E c k +== 解密:( )26mod )(11 2k c k c D m k -==- 其中,k 1和k 2为密钥,k 1∈Z q ,k 2∈Z q *。 三、实验步骤 1)在main 函数中构建框架,函数主要分为三部分,加密,解密,计算字符出现频率; 2)加密函数encrypt(),首先需要输入两个密钥K1,k2,需要注意k2是和26互质的,所以这里用gcd()函数判断了k2与26的最大公约数,加解密都采用了文件操作,明文和密文都保存在文件中,这里加密时根据ascii 码,对大小字母分别加密,其他字符则保持不变; 3)解密函数decode(),和加密函数类似,需要注意解密要用到密钥K2的逆元,所以这里用函数inverse_k2()进行了逆元的求解,另外需要注意的是解密运算过程中可能出现数值为负数的情况,在模运算下应该将它们重新置为整数。 4)计算字符频率函数calculateCharFreq(),这里只对大小字母进行统计,不计其他字符。 源代码: ********************* main.cpp ********************** #include #include int main () { void encrypt (); void decode (); void calculateCharFreq ();

密码学实验报告

《—现代密码学—》 实验指导书 适用专业:计算机科学与技术 江苏科技大学计算机科学学院 2011年11 月 实验一古典密码 实验学时:2学时 实验类型:验证 实验要求:必修 一、实验目的

编程实现古典密码的加解密方法。 二、实验内容 (1)移位密码的加密和解密函数。 (2)仿射密码的加密和解密函数。 (3)维吉尼亚密码的加密和解密函数。 三、实验原理、方法和手段 (1)移位密码 对于明文字符x ,加密密钥k ,加密方法为 ,1,2,,25y x k k =+= 解密方法为 ,1,2,,25x y k k =-= (2)仿射密码 对于明文字符x ,加密密钥(,)a b ,加密方法为 ,gcd(,26)1,1,2,,25y ax b a b =+== 解密方法为 1()x a y b -=- (3)维吉尼亚密码 选取密钥字Key ,将明文按照密钥字长度分组,将明文与密钥字对应字符相加并对26求余,即为密文字符。 i i i y x k =+ 解密过程为 i i i x y k =- 四、实验组织运行要求 本实验采用集中授课形式,每个同学独立完成上述实验要求。 五、实验条件 每人一台计算机独立完成实验,有如下条件: (1)硬件:微机;

(2)软件:VC++6.0、VC++.Net 2005。 六、实验步骤 (1)将各函数编写完成; (2)在主函数中调用各函数,实现加密和解密。 七、实验报告 实验报告主要包括实验目的、实验内容、实验原理、源程序及结果。移位密码加密: #include #define n 3 //移位位数 void change(char string[]) { int i; for(i=0;string[i]!='\0';i++) { if(string[i]>='a'&&string[i]<='z') string[i]=(string[i]+n>='z'?string[i]+n-26:string[i]+n); } } void main() { char str[100]; printf("请输入一段明文"); gets(str); change(str); printf("密文为:\n"); puts(str); }

相关文档
最新文档