密码学实验(RSA完整算法)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
密码学实验
——RSA算法实现
姓名:
班级:
学号:
教师:
助教:
一.程序功能函数定义
①p ublic static String toHexString(byte[] b)
——格式转换函数
②p ublic KeyPair generateKey() throws
NoSuchAlgorithmException
——密钥对生成函数
③p rotected byte[] PKCS1Ecryption(RSAPublicKey
publicKey, String Data)
——PKCS1机制下RSA加密函数
④p rotectedbyte[] PKCS1DeEcryption
(RSAPrivateKey
privateKey, byte[] raw)
——PKCS1机制下RSA解密密函数
⑤p rotected byte[] OAEPEcryption(RSAPublicKey
publicKey, String Data)
——OAEP机制下RSA加密函数
⑥p rotectedbyte[] OAEPDeEcryption
(RSAPrivateKey
privateKey, byte[] raw)
——OAEP机制下RSA解密密函数
⑦p ublic static void main(String[] args)
——主函数(Main)
二.程序功能函数说明(含返回、参数)《1》public KeyPair generateKey() throws
NoSuchAlgorithmException
A.入口参数:无
B.返回类型:KeyPair类(JAVA库类)——密钥对
C.函数功能:利用系统随机源(且这里指定密钥长度为
512bit)与指定的算法类(RSA)构造一对密钥对《2》protected byte[] PKCS1Ecryption(RSAPublicKey publicKey, String Data)
A.入口参数:RSA公钥类publickey和字符串类data
B.返回类型:字节数组类——密文形式
C.函数功能:能将原明文首先转化成字节数组形式,并
且利用加密库Cipher与Security指定PKCS1机制下的
RSA加密算法对明文加密并且以字节数组的形式返回
加密后得到的密文
《3》protected byte[] OAEPEcryption(RSAPublicKey publicKey, String Data)
A.入口参数:RSA公钥类publickey和字符串类data
B.返回类型:字节数组类——密文形式
C.函数功能:能将原明文首先转化成字节数组形式,并
且利用加密库Cipher与Security指定OAEP机制下的
RSA加密算法对明文加密并且以字节数组的形式返回
加密后得到的密文
《4》protected byte[] PKCS1DeEcryption
(RSAPrivateKey privateKey, byte[] raw)
A.入口参数:RSA私钥类privatekey和字节数组类raw
B.返回类型:字节数组类——明文形式
C.函数功能:利用加密库Cipher与Security指定PKCS1
机制下的RSA解密算法对密文解密并且以字节数组
的形式返回解密后得到的明文
《5》protected byte[] OAEPDeEcryption
(RSAPrivateKey privateKey, byte[] raw)
A.入口参数:RSA私钥类privatekey和字节数组类raw
B.返回类型:字节数组类——明文形式
C.函数功能:利用加密库Cipher与Security指定OAEP
机制下的RSA解密算法对密文解密并且以字节数组
的形式返回解密后得到的明文
《6》public static String toHexString(byte[] b)
A.入口参数:字节数组
B.返回类型:字符串
C.函数功能:将任意的字节数组转换成ASCII码形式的
(十六进制)字符串,便于在屏幕上显示和方便阅读《7》public static void main(String[] args)
A.入口参数:字符串(主函数只可一次调用)
B.返回类型:无
C.函数功能:提供用户手动输入,由用户指定需要加密
的明文和加密的机制(3项选择),生成密钥对并对明
文加密再对密文解密,最后全部显示出来供用户审阅三.编程关键与疑难解决
本次编程实验重在掌握加密库的使用,这里JAVA (JDK1.7)提供了两大库——Cipher与Security,正确利
用它们进行RSA加密是本实验的关键所在
老实说,由于这两大库内容很多比较复杂,自己慢慢研究是很费时间的,于是我在网上查找文档和资料,需求论坛高手解答,最终确定主要用到以下库类:
java.security.KeyPair;
java.security.KeyPairGenerator;
java.security.NoSuchAlgorithmException;
java.security.SecureRandom;
java.security.interfaces.RSAPrivateKey;
java.security.interfaces.RSAPublicKey;
java.util.Scanner;
javax.crypto.Cipher;
确认了库类后,就可以根据eclipse提示正确找到JDK1.7提供的RSA加密函数了,接下来操作就是搞懂每
个库函数的用法即可了!