[作业]RSA应用加密解密程序[2009-03-25]

这个作业花费了我挺久的时间,不是因为它难,而是自己的java api已经很生疏了,边查边做,虽然做的还是Application的DOS界面,没有使用swt的界面,因而在一些人性化的功能上还有较大欠缺

 

程序主要输入参数是:用于RSA加密、解密的公钥PublicKey,两个素数值,以及需要加密的数据(由于作业要求给出的是一段大写字符串)
我的处理方法是使用java.math.BigInteger的类,里面有使用公钥加密明文和使用私钥解密消息的方法,不用手写,相当方便,我了解他的计算思路,但是还是不能用程序结构来表达,故使用现有方法。对于输入字符串,我把它转换成ASCII码值,再把它分成两个字符一组,进行加密解密,不过我想如果把整个字符串作为BigInteger类型的数值输入,进行加密,然后解密应该也是可以的,那就是说我的方法在数据处理量和速度上还是可以有所提高的,毕竟我划分后相当于计算14个BigInteger类型的数,办法很笨.....
下面是程序中主要用到的加密、解密方法以及我对输入数据的处理方式,解密数据的还原过程:
解密的函数以及参数:cipherMessage.modPow(this.SecretKey, this.PrimeN);
加密的函数以及参数:plaintmessage.modPow(this.PublicKey, this.PrimeN);
将输入字符串转换成相应的ASCII码:
for(int i=0;i 
{
int m = (int) (messagestring.charAt(i)-64);
if(m != -32)
{
if(m>9)
{
messageBuffer.append(m);
}
else
{
messageBuffer.append(0);
messageBuffer.append(m);
}
}
else
{
messageBuffer.append("00");
}
}
每两个字符的相应ASCII码值划分及加密:
for(int Bigi=0;Bigi 
{
String messageBufferString = new String(messageBuffer.substring(Bigi, Bigi+4)).trim();
//System.out.println("\nMessageBufferString="+messageBufferString);
BigInteger messageBigInteger = new BigInteger(messageBufferString); 
BigInteger returnMessageBigInteger = messagecipher.ComputeEncipherValue(messageBigInteger);
cipherBuffer.append(returnMessageBigInteger+" ");
Bigi += 4;
}
对于加密数据的解密及划分:
for(int i=0;i 
{
//System.out.println("\n m ="+m);
if(((int) (cipherstring.charAt(i)-32)) != 0){
m++;
}
else{
String bigIntegerString = new String(cipherstring.substring(i-m, i).trim());
//System.out.println("\n String is:"+bigIntegerString);
BigInteger cipherBigInteger = new BigInteger(bigIntegerString);
m = 0;
BigInteger decipherBigInteger = decipher.ComputeDecipherValue(cipherBigInteger);
if(decipherBigInteger.intValue() <> 
cipherBuffer.append("0"+decipherBigInteger+" ");
}
else{
cipherBuffer.append(decipherBigInteger+" ");
}
}
}
数据还原解密的方式与上述过程类似,不再赘述,我要开始模式识别的编成了,matlab......
这个的优化只能wait & continue....
今天晚些时候,我已经做了一个测试,发现通过原有数据的ASCII未经划分直接加密,然后解密,最终无法出现原有数据内容,所以我想问题应该是由于大整数类型数值计算,这个有待查证......

转载于:https://www.cnblogs.com/yangwei86/archive/2009/06/03/1494971.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值