📄 testrsa.java
字号:
package com.dmgc.security.cipher.unsymmetic.rsa.test;
import com.dmgc.security.cipher.unsymmetic.rsa.*;
import com.dmgc.security.cipher.util.*;
import java.io.*;
/**
* <p>Title: DMGC SECURITY CIPHER LIB</p>
* <p>Description: 上海信宁科技有限公司 安全密码库(JAVA version)</p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: 上海信宁科技有限公司</p>
* 本程序用于测试
* @author 陆荣幸 周渊 潘勇
* @version 1.0
*/
public class TestRSA {
/**
* 测试文件
*/
private void testNewFileF()
{
String scr = "D:\\lurongxing.txt";
String des = "D:\\lurongxing.cipher";
String scrscr = "d:\\lurongxing.copy.txt";
long starttime, endtime;
//
String e = "NewRSAKey.public";
String d = "NewRSAKey.private";
//
//
System.out.println("测试加密消息");
starttime = System.currentTimeMillis();
System.out.println("开始时间 " + starttime);
//
RSAEncryption g1 = new RSAEncryption();
//
try {
g1.NewFileEncryptionF(e, scr, des);
}
catch (IOException ex) {
ex.printStackTrace();
}
catch (InvalidKeyFileException ex) {
ex.printStackTrace();
}
endtime = System.currentTimeMillis();
System.out.println("结束时间 " + endtime);
System.out.println("总共时间为 " + (endtime - starttime));
//
System.out.println("测试解密消息");
starttime = System.currentTimeMillis();
System.out.println("开始时间 " + starttime);
RSADecryption g2 = new RSADecryption();
try {
g2.NewFileDecryptionF(d, des, scrscr);
}
catch (IOException ex1) {
ex1.printStackTrace();
}
catch (InvalidKeyFileException ex1) {
ex1.printStackTrace();
}
catch (InvalidCryptographException ex1) {
ex1.printStackTrace();
}
endtime = System.currentTimeMillis();
System.out.println("结束时间 " + endtime);
System.out.println("总共时间为 " + (endtime - starttime));
}
/**
* 测试处理消息,密钥为文件
*/
private void testNewMessageF() {
//
String plainText = "Hello, world! I am a PHD, at shanghai jiaotong university";
byte[] plainByte = plainText.getBytes();
long starttime, endtime;
//
String e = "d:\\rsafile.public";
String d = "d:\\rsafile.private";
//
System.out.println("测试加密消息");
starttime = System.currentTimeMillis();
System.out.println("开始时间 " + starttime);
//
RSAEncryption g1 = new RSAEncryption();
//
try {
byte[] cipher = g1.NewMessageEncryptionF( e,
plainByte);
endtime = System.currentTimeMillis();
System.out.println("结束时间 " + endtime);
System.out.println("总共时间为 " + (endtime - starttime));
//
System.out.println("测试解密消息");
starttime = System.currentTimeMillis();
System.out.println("开始时间 " + starttime);
RSADecryption g2 = new RSADecryption();
try {
byte[] plain = g2.NewMessageDecryptionF(
d, cipher);
endtime = System.currentTimeMillis();
System.out.println("结束时间 " + endtime);
System.out.println("总共时间为 " + (endtime - starttime));
System.out.println("恢复明文为:");
for (int i = 0; i < plain.length; i++) {
System.out.print( (char) plain[i]);
}
}
catch (InvalidCryptographException ex1) {
ex1.printStackTrace();
}
}
catch (MessageTooLongException ex1) {
ex1.printStackTrace();
}
catch (FileNotFoundException ex1)
{
ex1.printStackTrace();
}
catch (Exception ex1)
{
ex1.printStackTrace();
}
}
/**
* 测试生成新的密钥文件
*/
private void testNewKeyFileGeneator() {
System.out.println("测试生成密钥文件");
long starttime = System.currentTimeMillis();
System.out.println("开始时间 " + starttime);
//
int publickeyLength = 3;
String keyname = "NewRSAKey";
//
RSAKeyPairGenerator g = new RSAKeyPairGenerator();
g.getKeyNewPairFile(publickeyLength,keyname);
// g.getKeyPairFile(publickeyLength, keyname);
long endtime = System.currentTimeMillis();
System.out.println("结束时间 " + endtime);
System.out.println("总共时间为 " + (endtime - starttime));
}
/**
* 测试生成密钥文件
*/
private void testKeyFileGeneator() {
System.out.println("测试生成密钥文件");
long starttime = System.currentTimeMillis();
System.out.println("开始时间 " + starttime);
//
int publickeyLength = 3;
String keyname = "RSAKey";
//
RSAKeyPairGenerator g = new RSAKeyPairGenerator();
g.getKeyPairFile(publickeyLength, keyname);
long endtime = System.currentTimeMillis();
System.out.println("结束时间 " + endtime);
System.out.println("总共时间为 " + (endtime - starttime));
}
/**
* 测试文件
*/
private void testFileF()
{
String scr = "D:\\test.pdf";
String des = "D:\\test.cipher";
String scrscr = "d:\\test.copy.pdf";
long starttime, endtime;
//
String n = "RSAKey.modulus";
String e = "RSAKey.public";
String d = "RSAKey.private";
//
//
System.out.println("测试加密消息");
starttime = System.currentTimeMillis();
System.out.println("开始时间 " + starttime);
//
RSAEncryption g1 = new RSAEncryption();
//
try {
g1.FileEncryptionF(n,e, scr, des);
}
catch (IOException ex2) {
ex2.printStackTrace();
}
endtime = System.currentTimeMillis();
System.out.println("结束时间 " + endtime);
System.out.println("总共时间为 " + (endtime - starttime));
//
System.out.println("测试解密消息");
starttime = System.currentTimeMillis();
System.out.println("开始时间 " + starttime);
RSADecryption g2 = new RSADecryption();
try {
g2.FileDecryptionF(n,d, des, scrscr);
}
catch (IOException ex3) {
ex3.printStackTrace();
}
catch (InvalidCryptographException ex3) {
ex3.printStackTrace();
}
endtime = System.currentTimeMillis();
System.out.println("结束时间 " + endtime);
System.out.println("总共时间为 " + (endtime - starttime));
}
private void testFile() {
String scr = "D:\\test.pdf";
String des = "D:\\test.cipher";
String scrscr = "d:\\test.copy.pdf";
long starttime, endtime;
//
//
System.out.println("测试生成密钥");
starttime = System.currentTimeMillis();
System.out.println("开始时间 " + starttime);
//
int publickeyLength = 3;
//
RSAKeyPairGenerator g = new RSAKeyPairGenerator();
DmgcMpInteger[] keys = g.getKeyPair(publickeyLength);
endtime = System.currentTimeMillis();
System.out.println("结束时间 " + endtime);
System.out.println("总共时间为 " + (endtime - starttime));
//
System.out.println("测试加密消息");
starttime = System.currentTimeMillis();
System.out.println("开始时间 " + starttime);
//
RSAEncryption g1 = new RSAEncryption();
//
try {
g1.FileEncryption(keys[1].toString(), keys[2].toString(), scr, des);
}
catch (IOException ex2) {
ex2.printStackTrace();
}
endtime = System.currentTimeMillis();
System.out.println("结束时间 " + endtime);
System.out.println("总共时间为 " + (endtime - starttime));
//
System.out.println("测试解密消息");
starttime = System.currentTimeMillis();
System.out.println("开始时间 " + starttime);
RSADecryption g2 = new RSADecryption();
try {
g2.FileDecryption(keys[1].toString(),
keys[3].toString(), des, scrscr);
}
catch (IOException ex3) {
ex3.printStackTrace();
}
catch (InvalidCryptographException ex3) {
ex3.printStackTrace();
}
endtime = System.currentTimeMillis();
System.out.println("结束时间 " + endtime);
System.out.println("总共时间为 " + (endtime - starttime));
}
/**
* 测试处理消息,密钥为文件
*/
private void testMessageF() {
//
String plainText = "Hello, world!";
byte[] plainByte = plainText.getBytes();
long starttime, endtime;
//
String n = "RSAKey.modulus";
String e = "RSAKey.public";
String d = "RSAKey.private";
//
System.out.println("测试加密消息");
starttime = System.currentTimeMillis();
System.out.println("开始时间 " + starttime);
//
RSAEncryption g1 = new RSAEncryption();
//
try {
byte[] cipher = g1.MessageEncryptionF(n, e,
plainByte);
endtime = System.currentTimeMillis();
System.out.println("结束时间 " + endtime);
System.out.println("总共时间为 " + (endtime - starttime));
//
System.out.println("测试解密消息");
starttime = System.currentTimeMillis();
System.out.println("开始时间 " + starttime);
RSADecryption g2 = new RSADecryption();
try {
byte[] plain = g2.MessageDecryptionF(n,
d, cipher);
endtime = System.currentTimeMillis();
System.out.println("结束时间 " + endtime);
System.out.println("总共时间为 " + (endtime - starttime));
System.out.println("恢复明文为:");
for (int i = 0; i < plain.length; i++) {
System.out.print( (char) plain[i]);
}
}
catch (InvalidCryptographException ex1) {
ex1.printStackTrace();
}
}
catch (MessageTooLongException ex1) {
ex1.printStackTrace();
}
catch (FileNotFoundException ex1)
{
ex1.printStackTrace();
}
catch (Exception ex1)
{
ex1.printStackTrace();
}
}
/**
* 测试消息处理
*/
private void testMessage() {
String plainText = "Hello, world!";
byte[] plainByte = plainText.getBytes();
//
System.out.println("测试生成密钥");
long starttime = System.currentTimeMillis();
System.out.println("开始时间 " + starttime);
//
int publickeyLength = 3;
//
RSAKeyPairGenerator g = new RSAKeyPairGenerator();
DmgcMpInteger[] keys = g.getKeyPair(publickeyLength);
long endtime = System.currentTimeMillis();
System.out.println("结束时间 " + endtime);
System.out.println("总共时间为 " + (endtime - starttime));
//
System.out.println("测试加密消息");
starttime = System.currentTimeMillis();
System.out.println("开始时间 " + starttime);
//
RSAEncryption g1 = new RSAEncryption();
//
try {
byte[] cipher = g1.MessageEncryption(keys[1].toString(), keys[2].toString(),
plainByte);
endtime = System.currentTimeMillis();
System.out.println("结束时间 " + endtime);
System.out.println("总共时间为 " + (endtime - starttime));
//
System.out.println("测试解密消息");
starttime = System.currentTimeMillis();
System.out.println("开始时间 " + starttime);
RSADecryption g2 = new RSADecryption();
try {
byte[] plain = g2.MessageDecryption(keys[1].toString(),
keys[3].toString(), cipher);
endtime = System.currentTimeMillis();
System.out.println("结束时间 " + endtime);
System.out.println("总共时间为 " + (endtime - starttime));
System.out.println("恢复明文为:");
for (int i = 0; i < plain.length; i++) {
System.out.print( (char) plain[i]);
}
}
catch (InvalidCryptographException ex1) {
ex1.printStackTrace();
}
}
catch (MessageTooLongException ex) {
ex.printStackTrace();
}
}
/**
* 测试生成素数两种方法比较
* 经济统计测试,
* getFastBitPrime() 时间方差较小
* getBitPrime()时间方差较大
*/
private void testGeneratePrime() {
//测试100次结果
long i1=0 ,i2=0;
for (int i = 0; i < 20; i++) {
System.out.println("--------------------------------------------");
System.out.println("getBitPrime测试生成密钥");
long starttime = System.currentTimeMillis();
// System.out.println("开始时间 " + starttime);
DmgcMpInteger.getBitPrime(64);
long endtime = System.currentTimeMillis();
// System.out.println("结束时间 " + endtime);
System.out.println("总共时间为 " + (endtime - starttime));
i1 = i1 + endtime - starttime;
System.out.println("getFastBitPrime测试生成密钥");
starttime = System.currentTimeMillis();
// System.out.println("开始时间 " + starttime);
DmgcMpInteger.getFastBitPrime(64);
endtime = System.currentTimeMillis();
// System.out.println("结束时间 " + endtime);
System.out.println("总共时间为 " + (endtime - starttime));
i2 = i2 + endtime - starttime;
}//for
System.out.println("getBitPrime is " + (i1/1000)*20 + " "+ i1%20000);
System.out.println("getBitPrime is " + (i2/1000)*20 + " "+ i2%20000);
}
/**
* 构造函数
*/
public TestRSA() {
// testKeyFileGeneator();
// testMessage();
// testMessageF();
// testFile();
// testFileF();
// testNewKeyFileGeneator();
// testNewMessageF();
// testNewFileF();
// testGeneratePrime();
}
/**
* 测试主函数
* @param args
*/
public static void main(String[] args) {
TestRSA testRSA1 = new TestRSA();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -