实验2 数据加密与数字签名
密码学案例实验报告书

一、实验背景随着信息技术的飞速发展,信息安全问题日益突出。
密码学作为保障信息安全的核心技术,在数据加密、身份认证、数字签名等领域发挥着重要作用。
为了加深对密码学原理的理解,提高实际应用能力,我们开展了本次密码学案例实验。
二、实验目的1. 掌握DES加密算法的基本原理和操作步骤。
2. 熟悉RSA加密算法的原理和应用。
3. 学习数字签名技术的应用。
4. 培养动手实践能力,提高解决实际问题的能力。
三、实验内容1. DES加密算法(1)实验目的:了解DES加密算法的基本原理,掌握DES加密和解密过程。
(2)实验内容:① 设计一个简单的DES加密程序,实现明文到密文的转换。
② 设计一个简单的DES解密程序,实现密文到明文的转换。
(3)实验步骤:① 编写DES加密程序,输入明文和密钥,输出密文。
② 编写DES解密程序,输入密文和密钥,输出明文。
2. RSA加密算法(1)实验目的:了解RSA加密算法的基本原理,掌握RSA加密和解密过程。
(2)实验内容:① 设计一个简单的RSA加密程序,实现明文到密文的转换。
② 设计一个简单的RSA解密程序,实现密文到明文的转换。
(3)实验步骤:① 编写RSA加密程序,输入明文和密钥对,输出密文。
② 编写RSA解密程序,输入密文和私钥,输出明文。
3. 数字签名技术(1)实验目的:了解数字签名技术的基本原理,掌握数字签名的生成和验证过程。
(2)实验内容:① 设计一个简单的数字签名程序,实现签名生成和验证。
(3)实验步骤:① 编写数字签名程序,输入明文、私钥和签名算法,输出签名。
② 编写数字签名验证程序,输入明文、公钥和签名,验证签名是否正确。
四、实验结果与分析1. DES加密算法实验结果通过编写DES加密和解密程序,成功实现了明文到密文和密文到明文的转换。
实验结果表明,DES加密算法在保证数据安全的同时,具有较高的效率。
2. RSA加密算法实验结果通过编写RSA加密和解密程序,成功实现了明文到密文和密文到明文的转换。
数字加密技术实验报告单

数字加密技术实验报告单实验目的:本实验旨在通过实践了解数字加密技术的基本原理和应用,掌握常见的加密算法,并通过编程实现加密和解密过程,加深对数字安全的认识。
实验环境:- 操作系统:Windows 10- 编程语言:Python 3.8- 开发工具:PyCharm实验原理:数字加密技术是信息安全领域的核心内容之一,它通过将原始数据(明文)转换成不可读的格式(密文),以保证数据在传输过程中的安全性。
常见的加密算法包括对称加密算法(如AES、DES)和非对称加密算法(如RSA、ECC)。
实验内容:1. 学习数字加密技术的基本理论,包括加密和解密过程、密钥的作用等。
2. 掌握Python语言中实现加密和解密的方法。
3. 编写程序实现AES对称加密算法的加密和解密过程。
4. 分析加密数据的安全性,并尝试破解简单加密算法。
实验步骤:1. 环境搭建:安装Python环境和PyCharm开发工具。
2. 理论学习:阅读相关资料,理解加密技术的基本概念。
3. 编程实践:编写AES加密和解密的Python程序。
a. 导入所需的库:`from Crypto.Cipher import AES`b. 定义密钥和初始化向量。
c. 实现加密函数,将明文转换为密文。
d. 实现解密函数,将密文还原为明文。
4. 测试程序:使用不同的明文数据测试加密和解密程序的正确性。
5. 安全性分析:尝试使用简单的方法(如暴力破解)对加密数据进行破解,分析加密算法的安全性。
实验结果:通过编写的程序,成功实现了AES加密算法的加密和解密过程。
测试结果显示,程序能够正确地将明文转换为密文,并将密文还原为原始的明文。
在安全性分析中,发现简单的暴力破解方法在面对AES加密时几乎不可能成功,证明了AES算法的安全性。
实验结论:数字加密技术是保障数据传输安全的重要手段。
通过本次实验,我们不仅学习了加密技术的理论知识,还通过编程实践加深了对加密过程的理解。
AES算法作为一种高效的对称加密算法,在实际应用中表现出了良好的安全性。
数字签名算法实验报告

竭诚为您提供优质文档/双击可除数字签名算法实验报告篇一:数字签名实验报告附件2:北京理工大学珠海学院实验报告ZhuhAIcAmpAusoFbeIJIngInsTITuTeoFTechnoLogY实验题目数字签名实验实验时间20XX.4.8一、实验目的:(1)掌握数字签名技术的原理;(2)熟悉密钥的生成及其应用。
二、实验内容以及步骤:RsA-pKcs签名算法(一)签名及验证计算(1)进入实验实施,默认选择即为“RsA-pKcs”标签,显示RsA-pKcs签名实验界面。
(2)选择明文格式,输入明文信息。
点击“计算shA1值”按钮,生成明文信息的散列值。
(3)选择密钥长度,此处以512bit为例,点击“生成密钥对”按钮,生成密钥对和参数。
选择“标准方法”标签,在标签下查看生成的密钥对和参数。
(4)标准方法签名及验证点击“标准方法”标签下的“获得签名值”按钮,获取明文摘要的签名值,签名结果以十六进制显示于相应的文本框内;点击“验证签名”按钮,对签名结果进行验证,并显示验证结果;上述过程如图1.1.8-3所示。
(5)选择“中国剩余定理方法”标签,在标签下查看生成的密钥对和参数。
(6)中国剩余定理方法签名及验证点击“中国剩余定理方法”标签下的“获得签名值”按钮,获取明文摘要的签名值,签名结果以十六进制显示于相应的文本框内;点击“验证签名”按钮,对签名结果进行验证,并显示验证结果。
eLgAmAL签名算法(1)在“RsA-pKcs”标签下的扩展实验中,点击“eLgAmAL 扩展实验”按钮,进入eLgAmAL签名算法扩展实验窗体。
(2)设置签名系统参数。
在文本框“大素数p”内输入一个大的十进制素数(不要超过8位);然后在文本框“本原元a”内输入一个小于p的十进制正整数,点击“测试”。
(3)注册用户,在“用户名”文本框中输入一个“注册用户列表”中未出现的用户名,如“alice”,点击“注册”按钮。
(4)在“用户注册”窗口中的文本框“私钥x”中输入一个小于素数p的十进制非负整数,点击“确定”按钮;然后,点击“计算公钥”按钮,系统会为该用户生成一对公私钥。
数字签名与加密实习报告

数字签名与加密实习报告一、实习背景及目的数字签名和加密是现代信息安全领域中的重要技术,对于保护数据的安全性和完整性起到至关重要的作用。
在本次实习中,我有幸加入了一家知名的互联网安全公司,参与了数字签名和加密技术的研究和应用。
实习的目的是深入了解数字签名和加密的原理和方法,并通过实际操作来掌握相关技能。
二、实习过程及内容1. 数字签名数字签名是数字证书技术的一种应用,它通过使用公钥密码学的方法来保证信息的完整性、真实性和不可否认性。
在实习过程中,我学习了数字签名的基本原理和工作流程。
首先,发起者使用哈希函数对所要发送的数据进行哈希计算,生成一个摘要。
然后,发起者使用自己的私钥对摘要进行加密,形成数字签名。
接收者在收到数据后,使用发起者的公钥对数字签名进行解密,并使用同样的哈希函数对收到的数据进行哈希计算,生成一个新的摘要。
最后,接收者将生成的摘要与解密后的摘要进行比对,如果一致,则说明数据的完整性和真实性没有被篡改。
在实习过程中,我使用了多种数字签名算法,比如RSA、DSA和ECDSA等,学习了它们的特点、安全性和适用场景,并通过具体的实例来加深理解。
我还了解了数字签名的应用场景,比如在电子商务中的安全支付、电子合同的签署以及电子证据的保全等方面。
2. 加密算法加密算法是信息安全领域中的核心技术之一,它通过使用密钥来对数据进行加密,以保证数据在传输和存储过程中的安全性。
在实习中,我学习了对称加密算法和非对称加密算法两种主要的加密方法。
对称加密算法使用同一个密钥来进行加密和解密,常见的对称加密算法有DES、3DES和AES等。
在实习中,我学习了这些算法的工作原理、安全性和性能,并且通过实际操作使用Python编写了加密和解密的代码。
我还了解了对称加密算法的应用场景,比如在网络通信中的数据加密、硬盘文件的加密和数据库的加密等方面。
非对称加密算法使用两个密钥,一个用于加密,另一个用于解密,常见的非对称加密算法有RSA、DSA和ECC等。
数字签名原理与实现

数字签名是一种用于验证数字文档完整性和认证文档来源的技术。
数字签名通过使用私钥对文档进行加密,使得只有拥有相应公钥的人才能解密并验证签名的有效性。
数字签名广泛应用于电子商务、电子政务、数字证书、数字证书认证等领域。
数字签名的原理数字签名的原理是利用数字证书和哈希函数对原始文档进行加密和验证。
数字证书是一种用于证明实体身份的电子证书,包含证书持有者的公钥和其他信息。
数字签名就是使用私钥对原始文档进行加密,并使用公钥对加密后的数据进行解密并验证签名。
具体实现步骤如下:1. 使用哈希函数对原始文档进行哈希运算,得到文档的哈希值。
2. 使用私钥对哈希值进行加密,得到数字签名。
3. 将原始文档和数字签名一起发送给接收者。
4. 接收者使用公钥对数字签名进行解密,得到原始文档的哈希值。
5. 接收者再次使用哈希函数对原始文档进行哈希运算,得到一个新的哈希值。
6. 如果两个哈希值相等,则说明原始文档未被篡改,签名有效;否则,签名无效。
数字签名的实现数字签名的实现需要使用数字证书和私钥。
数字证书由权威的第三方机构颁发,包含证书持有者的公钥和其他信息。
私钥是证书持有者的私钥,用于加密数字签名。
下面是数字签名的实现步骤:1. 原始文档需要进行哈希运算,得到文档的哈希值。
2. 使用私钥对哈希值进行加密,得到数字签名。
3. 将原始文档和数字签名一起发送给接收者。
4. 接收者使用公钥对数字签名进行解密,得到原始文档的哈希值。
5. 接收者再次使用哈希函数对原始文档进行哈希运算,得到一个新的哈希值。
6. 如果两个哈希值相等,则说明原始文档未被篡改,签名有效;否则,签名无效。
数字签名的应用场景数字签名广泛应用于电子商务、电子政务、数字证书、数字证书认证等领域。
在电子商务中,数字签名可以确保交易双方的身份认证和交易文件的完整性,防止交易文件被篡改或伪造。
在电子政务中,数字签名可以确保政府文件的真实性和完整性,防止政府文件被篡改或伪造。
rsa实验报告

rsa实验报告RSA实验报告引言:RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,广泛应用于信息安全领域。
本实验旨在通过实际操作,深入了解RSA算法的原理和应用。
一、RSA算法原理RSA算法基于数论中的大数分解问题,其核心原理是利用两个大质数的乘积很容易计算得到,但是将这个乘积分解为两个大质数却非常困难。
以下是RSA算法的具体步骤:1. 选择两个不相等的大质数p和q,并计算它们的乘积n=p*q。
2. 计算n的欧拉函数φ(n)=(p-1)*(q-1)。
3. 选择一个小于φ(n)且与φ(n)互质的整数e作为公钥指数。
4. 计算e的模反元素d,即满足(e*d)%φ(n)=1的整数d,作为私钥指数。
5. 公钥为(n, e),私钥为(n, d)。
6. 加密时,将明文m通过公式c=(m^e)%n计算得到密文c。
7. 解密时,将密文c通过公式m=(c^d)%n计算得到明文m。
二、实验过程1. 生成密钥对首先,我们使用Python编程语言生成RSA密钥对。
通过调用相关库函数,我们可以轻松地生成公钥和私钥。
2. 加密与解密接下来,我们使用生成的密钥对进行加密与解密操作。
我们选择一段文字作为明文,将其转化为整数形式,并使用公钥进行加密。
然后,使用私钥对密文进行解密,还原为明文。
3. 安全性分析RSA算法的安全性基于大数分解的困难性。
由于大质数的乘积很容易计算得到,而将其分解为两个大质数却非常困难,因此RSA算法在理论上是安全的。
然而,在实际应用中,如果选择的大质数不够大或者密钥管理不当,可能会导致算法的安全性受到威胁。
三、实验结果与分析经过实验,我们成功生成了RSA密钥对,并进行了加密与解密操作。
实验结果表明,RSA算法能够有效地实现信息的加密和解密。
四、应用领域RSA算法在信息安全领域有着广泛的应用。
以下是一些常见的应用场景:1. 数字签名RSA算法可以用于生成数字签名,确保数据的完整性和真实性。
网络安全实验报告-

计算机网络安全与管理实验报告实验一Linux系统学习与使用实验目的:1.熟练使用Linux系统的基本命令、相关文件操作、基本系统配置、网络配置等。
2.熟练并掌握Linux下的编程工具vi、gcc、gdb等。
实验内容1.Linux系统的安装。
2.根据命令查询手册,熟悉Linux下常用命令。
3.熟悉最基本的程序设计环境,熟悉并掌握vi,gcc,gdb等工具的使用。
实验过程与步骤实验过程与步骤1.系统的安装a.我已经在自己的主机上面安装了vm虚拟机,下来只用在vm中创建虚拟硬盘,安装ubuntu 系统。
开始进行ubuntu的安装:安装完毕,进入登陆界面:Mkdir命令,在当前目录下建立一个文件夹:Ls显示当前目录下的所有文件(夹):cd进入对应目录,如#cd/usr/src再如#cd..等,这个命令和windows下的差不多pwd显示当前路径如#pwdGcc对c文件进行编译:rm删除文件或文件目录,如#rm/root/a.txt或#rm–f/root/a.txt:3.熟悉最基本的程序设计环境使用vi输入如下程序,了解C程序的基本架构与流程,之后用gcc工具编译程序,并运行,然后再用gdb调试程序。
首先使用vi指令建立test.c文件:在文本中编写如下c程序:然后gdb test.c:在命令行上键入gdb并按回车键就可以运行gdb了。
实验二nmap、tcpdump、sniffer等工具的使用实验目的:1.练习用nmap来进行一些实际的扫描过程。
2.在已经熟练使用Linux系统的基础上学习使用tcpdump抓包工具。
3.掌握Sniffer的原理和使用技巧。
实验内容1.学会如何安装nmap、tcpump、sniffer等工具的安装与使用。
2.利用nmap进行一台计算机的扫描。
3.进行sniffer进行抓包操作并做分析。
实验过程与步骤:1.Nmap扫描:扫描了宿舍一个同学的电脑,得到信息如下:分析其中一部分端口:23:telnet端口;2121:可能为ftp端口;808:CProxy的http代理端口2.Sniffer抓包:使用windows7的telnet客户端登陆bbs,过滤包后得到下面的结果:图1:用户名的发送过程图2:密码的发送过程(图中用小黑方块覆盖的部分)实验三漏洞攻击实验实验目的:1.学习AT&T汇编的基本语法,回顾intel汇编语言并与AT&T汇编语言比较2.熟练掌握gdb的使用方法3.重点学习缓冲区溢出攻击的原理4.理解linux/windows系统下的堆栈溢出原理5.了解shellcode的构造方法6.通过实例了解SQL注入原理及实现实验内容及步骤:1.缓冲区溢出因使用Ubuntu9.04做实验,gcc4.3版本防止了缓冲区溢出,因此下载了gcc-3.4进行试验。
数字认证综合实验报告

一、实验目的本次实验旨在通过实际操作,了解数字认证的基本原理和应用,掌握数字认证技术的实现过程,并熟悉相关工具的使用方法。
通过实验,培养学生的动手能力和创新能力,提高学生在信息安全领域的实际操作能力。
二、实验环境1. 操作系统:Windows 102. 开发环境:Python3.73. 工具:PyCharm、数字证书生成工具、数字签名工具三、实验内容1. 数字证书的生成与导入(1)使用数字证书生成工具,生成一个自签名的数字证书。
(2)将生成的数字证书导入到本地密钥库中。
2. 数字签名的生成与验证(1)使用数字签名工具,对一份文档进行数字签名。
(2)验证数字签名的正确性。
3. 数字信封的加密与解密(1)使用数字信封加密工具,对一份文档进行加密。
(2)使用数字信封解密工具,对加密文档进行解密。
4. 数字证书的吊销与更新(1)使用数字证书吊销工具,吊销一个数字证书。
(2)使用数字证书更新工具,更新一个数字证书。
四、实验步骤1. 数字证书的生成与导入(1)打开数字证书生成工具,设置证书的属性,如有效期、密钥长度等。
(2)生成自签名数字证书,并保存到本地。
(3)打开Python,导入PyOpenSSL库,使用以下代码导入数字证书:```pythonfrom OpenSSL import cryptodef load_certificate(cert_path):with open(cert_path, 'rb') as f:cert = crypto.load_certificate(crypto.FILETYPE_PEM, f.read()) return cert# 导入数字证书cert_path = 'path/to/cert.pem'cert = load_certificate(cert_path)```2. 数字签名的生成与验证(1)使用数字签名工具,对一份文档进行数字签名。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验2 数据加密与与数字签名一、实验目的与要求体验各种密码体制的数据安全操作与数据安全软件以及了解我国的电子商务法律,并思考应如何做好电子商务的安全防范。
二、实验内容1.运行C语言编程的加密程序。
2.PGP软件的下载与使用(对邮件以及文件加密)或Openssl软件。
3.非密码的安全技术。
4.各国发展电子商务的政策和制定的电子商务法律。
5.我国第一部电子签名法的内容与实施三、实验软件Windows XP ,IE 7 ,PGP软件,Openssl软件四、实验步骤(一)数据安全软件的使用1.下载PGP与安装PGP(见附录)2.利用PGP对邮件或磁盘文件进行加密3.或者利用Openssl做如下操作:(用对称加密法对文件进行加密与解密)(1)生成源文件。
用记事本创建一个文本文件,文件名为学号(026h231f.txt),内容为学生的名字与学号,保存在c:\openssl\out32dll 的文件夹下。
(2)对源文件进行对称加密。
输入命令:“openssl enc-des3-in026h231f.txt-out out026h231f.des”回车后,在加密过程中系统会提示输入保护密码,输入密码后,再次确认(输入密码时屏幕无任何显示),系统在c:\openssl\out32dll目录下自动生成一个des3算法加密后的out026h231f.des文件。
(3)查看加密的文件。
输入命令:“type out026h23lf.des”,查看加密后的out026h231f.des文件的内容。
(4)对加密文件进行解密。
输入命令“openssl enc-des3-d-inout026h231f.des -out new026h231f.txt”,并根据提示输入解密密码,对“outmane.txt”文件内容进行解码。
(5)比较解密后文件和源文件,输入命令“type new026h23lf.txt”,查看解密后的文件内容,判断是否与源文件026h23lf.txt的内容一致。
(二)验证恺撒密码1、请输入如下程序:#include <stdio.h>main(){char c;while((c=getchar())!=’\n’){if((c>=’a’&&c<=’z’)||(c>=’A’&&c<=’Z’)){c=c+3;if(c>’z’&&c<=’z’+3||c>’Z’&&c<’Z’+3)c=c-26;}printf(“%c”,c);}}2、验证是否是素数?的C语言程序#include <math.h>Main(){Int m,I,k;Scanf(“%d,&m”);K=aqrt(m);For(i=2;i<=k;i++)If(m%i==0)break;If(i>k) printf(“%d is a prime number\n”,m);Else printf(%d is not a prime number\n”,m);}(三)了解RSA加密算法(四)了解我国非密码的安全技术的发展(五)了解各国发展电子商务的政策和制定的电子商务法律。
(六)了解我国第一部电子签名法的内容与实施上网查找《中华人民共和国电子签名法》的内容,分析该法所涉及的技术问题,体会它被称为我国第一部“真正意义上的信息化法律”的含义。
五、写出实验报告通过这次的实验,能够更好地了解电子商务的安全问题,了解电子商务的安全对策,电子商务发展所依托的平台—互联网络充满了巨大、复杂的安全风险,如黑客的攻击、病毒的肆虐等等都使得电子商务业务很难安全顺利地开展;此外,电子商务的发展还面临着严峻的内部风险,请结合你对电子商务的安全情况的了解,结合电子商务安全的风险管理与电子商务法律的实施,谈谈你对本实验的心得。
附录:PGP软件的使用的步骤:1.PGP软件安装。
2.生成或导入密钥对。
3.导出或备份密钥对和单独导出公钥。
4.双方相互发送加密文件,并对接受到的文件进行解密。
5.双方相互发送签名文件,并对接受到的文件验证对方的签名。
分别修改经过签名的文件的文件名和文件内容,并进行签名的验证,查看和分析所出现的验证结果。
[一]到网站下载PGP。
【二】启动PGP工具,生成密钥对1)启动PGP工具按执行软件的一般方法,点击“开始”—“程序”—“PGP”—“PGPkeys”(如果“PGP”中是空的,你可以在“开始”—“程序”—“启动”中找到“PGP”—“PGPtray”),即可启动PGP工具的密钥管理界面,你也可以点击屏幕右下角的PGPtray 图标(),再选择“PGPkeys”。
2)生成密钥对●在以上PGPkeys界面中,点击工具栏中的或者选择菜单中的“Keys”—“New Key”。
The PGP Key Generation Wizard将会提供一些介绍性的信息,读后点“下一步”。
●在“Full Name”框中输入你的用户名(用户名使用学号,譬如:0321XXX),在“Email Address”框中输入你的Email地址,然后点“下一步”。
●在Passphrase界面中,设置并输入用于以后启用你私钥的密码,在下面的方框内再次输入你私钥的密码已进行确认。
为了保密,通常你输入的密码不显示在屏幕上。
但如果你确定没有人在偷看,而且你也想看看你输入的密码,将“Hide Typing”小方框中的勾去掉即可。
●点“下一步”,系统开始自动制作密钥对,当提示完成时,点“下一步”。
●点“完成”。
2.上传和下载公钥。
【三】上传公钥在PGPkeys的主界面中选中将要上传的密钥,然后依次选择菜单中的“Server”—“Send To”—“ldap://”进行公钥的上传,上传完毕后,PGPkeys会提示你上传成功,这样你的公钥就已上传到了PGP的keyserver服务器,其它人可以根据你的用户名或Email地址搜索你的公钥,并下载。
【四】下载公钥在PGPkeys的主界面中依次选择菜单中的“Server”—“Search…”进入下图所示界面。
在手指所指位置所入用户号或其他搜索条件,譬如“zxz”,服务器便会在所有以上传的公钥中搜索符合条件的公钥,并加以显示。
按下图所示,在所有搜索到的公钥中找到你所需要的公钥并选中该公钥,使用鼠标右键调出快捷菜单,选中“Import to Local Keyring”将该公钥导入到本地的密钥管理器中。
答:PGP有以下主要功能:1.使用 PGP 对邮件加密,以防止非法阅读;2.能给加密的邮件追加上数字签名,从而使收信人进一步确信邮件的发送者,而事先不需要任何保密的渠道用来传递密钥;3.可以实现只签名而不加密,适用于发表公开声明时证实声明人身份,也可防止声明人抵赖,这一点在商业领域有很大的应用前景;4.能够加密文件,包括图形文件、声音文件以及其它各类文件;5.利用 PGP代替 Uuencode生成RADIX64(就是 MIME的BASE 64格式)的编码文件。
设甲要寄信给乙,他们互相知道对方的公钥。
甲就用乙的公钥加密邮件寄出,乙收到后就可以用自己的私钥解密出甲的原文。
由于别人不知道乙的私钥,所以即使是甲本人也无法解密那封信,这就解决了信件保密的问题。
另一方面,由于每个人都知道乙的公钥,他们都可以给乙发信,那么乙怎么确信来信是不是甲的,这就是数字签名的必要性,用数字签名来确认发信的身份。
PGP的数字签名是利用一个叫“邮件文摘”的功能,“邮件文摘”(message digest),简单地讲就是对一封邮件用某种算法算出一个最能体现这封邮件特征的数来,一旦邮件有任何改变这个数都会发生变化,那么这个数加上用户的名字(实际上在用户的密钥里)和日期等等,就可以作为一个签名了,确切地说PGP是用一个128位的二进制数进行为"邮件文摘"的,用来产生它的算法就是MD5。
MD5的提出者是Ron Rirest,PGP中使用的代码是由Colin Plumb 编写的MD5,MD5是一种单向散列算法,它不像校验码,是一份替代的邮件并且与原件具有同样的MD5特征值。
PGP给邮件加密和签名的过程是这样的:首先甲用自己的私钥将上述的128位值加密,附加在邮件后,再用乙的公钥将整个邮件加密(要注意这里的次序,如果先加密再签名的话,别人可以将签名去掉后签上自己的签名,从而篡改了签名)。
这样这份密文被乙收到以后,乙用自己的私钥将邮件解密,得到甲的原文和签名,乙的PGP也从原文计算出一个128位的特征值来和用甲的公钥解密签名所得到的数进行比较,如果符合就说明这份邮件确实是甲寄来的。
这样两个安全性要求都得到了满足。
PGP还可以只签名而不加密,这适用于公开发表声明时,声明人为了证实自己的身份(在网络上只能如此了),可以用自己的私签名,这样就可以让收件人能确认发信人的身份,也可以防止发信人抵赖自己的声明。
这一点在商业领域有很大的应用前途,它可以防止发信人抵赖和信件被途中篡改。
为什么说PGP用的是RSA和传统加密的杂合算法呢?因为RSA算法计算量很大而且在速度上也不适合加密大量数据,所以PGP实际上用来加密的不是RSA本身,而是采用了一种叫IDEA的传统加密算法,又称为“对称加密法”。
传统加密方法就是用一个密钥加密明文,然后用同样的密钥解密。
这种方法的代表是DES,这的主要缺点就是密码长度较短,且传递渠道解决不了安全性问题,不适合网络环境邮件加密需要。
IDEA是一个有专利的算法,它的加(解)密速度比RSA快得多,所以实际上PGP是以一个随机生成的密钥(每次加密不一样),用IDEA算法对明文加密,然后用RSA算法对该密钥加密。
这样收件人同样是用RSA解出这个随机密钥,再用IDEA解密邮件本身。
这样的链式加密就做到了既有RSA体系的保密性,又有IDEA算法的快捷性。
PGP加密前会对文件进行预压缩处理,PGP内核使用 PKZIP 算法来压缩加密前的明文。
一方面对文件而言,压缩后加密产生的密文可能比明文更短,这就节省了网络传输的时间。
另一方面,明文经过压缩,实际上相当于经过一次变换,信息更加杂乱无章,对明文攻击的抵御能力更强。
PGP中使用的PKZIP算法是经过原作者同意的。
PKZIP算法是一个公认的压缩率和压缩速度都相当好的压缩算法。
在PGP中使用的是PKZIP 2.0版本兼容的算法。