这个作业花费了我挺久的时间,不是因为它难,而是自己的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

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

  1. 加密解密_作业-加密解密程序

    # 加密解密程序'''作业:自己写一个加密程序,能够加密的内容是英文和汉字.同时加密并且解密就是说,一段话中既有中文又有英文,标点符号不用处理.加密规则,获取ascii码数字,中间用|分割# 思路提示 ...

  2. 加密解密_使用RSA密钥对加密解密数据

    使用RSA密钥对加密解密数据 作者: 郭政鸿 2021/1/6 前言: 前几天看了非对称加密, 那非对称加密处理常见的https中的应用, 平时我们可以用来做什么呢? 1. 生成RSA密钥对 使用op ...

  3. RSA分段加密/解密 nodejs 和java联调

    RSA分段加密/解密 nodejs 和java联调 文章目录 RSA分段加密/解密 nodejs 和java联调 1 nodejs 环境 1.1 axios配置 1.2 API接口 1.3 业务 1. ...

  4. md5可以解密吗_Python训练营作业1:加密解密

    Python训练营作业1:加密解密 import random#定义加密方式 def encrypt(keyword):"""对称加密:keyword: 明文:retur ...

  5. java rsa 117_java实现RSA非对称加密解密

    之前写过一篇java实现AES对称加密解密 在对密码加密传输的场景下 RSA非对称加密解密可能会更加适合. 原理就是后台生成一对公钥和私钥,公钥给前端用来加密,后台用私钥去解密,保证了传输过程中就算被 ...

  6. RSA算法加密解密举例

    RSA算法加密解密举例 使用如下数字字母对照表: 明文M="its all greek to me" ,p=47,q=59,e=17,求出其密文以及给出RSA 算法加/解密过程.( ...

  7. .NET Core 使用RSA算法 加密/解密/签名/验证签名

    前言 前不久移植了支付宝官方的SDK,以适用ASP.NET Core使用支付宝支付,但是最近有好几位用户反应在Linux下使用会出错,调试发现是RSA加密的错误,下面具体讲一讲. RSA在.NET C ...

  8. PHP语言的RSA算法加解密程序

    程序来源是GitHub的PHP RSA 公钥私钥不对称加密. Rsa.php程序如下: <?php /*** RSA 公钥 私钥加密 解密 尝试* @author wang <baobei ...

  9. java rsa 文件加密解密_RSA 加密、解密(自己生成加密解密文件)

    本文是自己阅读了网上的高人们的文章之后,实现功能后总结出来的,方便自己方便他人,不喜勿喷 加密解密需要生成公钥.私钥文件步骤 1.打开终端 输入 openssl 5F88AA4A-3913-4CBC- ...

最新文章

  1. Windows10安装Mysql5.7.19.0 msi 版本报错
  2. 容我喝一杯 java_花一杯茶的时间,学会Java反射(实用篇)
  3. 实战mariadb-galera集群架构
  4. rabbitmq优先级队列
  5. tensorflow+numpy 深度学习相关函数(持续更新)
  6. 查找域名、由名字查找某个熟知的端口、由名字查找协议
  7. mysql5权威指南_MySQL5权威指南(第3版)
  8. Hadoop学习笔记(一)——编译安装和配置
  9. 中考计算机考试exce,中考信息技术EXCEL操作.doc
  10. 大端模式和小端模式的再理解
  11. 从苹果店员到机器学习工程师:学习AI,我是这样起步的
  12. python_ 学习笔记(基础语法)
  13. SQL Server 2012笔记分享-10:理解数据压缩
  14. DaleCloud(原NFine)介绍二:系统菜单及菜单按钮权限控制
  15. 十六进制计算器 android,十六进制计算器
  16. MATLAB:randn简介
  17. slides.com 导出PDF
  18. 用批处理删除N天前或指定日期时间(前后)创建(或修改)的文件
  19. Spring源码分析(二):底层架构核心概念解析
  20. UDF函数和UDTF函数的图解举例,追加UDAF函数

热门文章

  1. 网卡流量监控工具vnstat的使用
  2. 如何在 GitHub 上高效搜索开源项目(转载)
  3. es6 混合commjs_Webpack打包ES6和CommonJs混合React
  4. 【kafka】kafka rebalance generation
  5. 【hue】 hue+sentry界面没有添加角色的按钮
  6. 使用Docker搭建hadoop集群
  7. 06-windows下Orcale使用Database Configuration Assistant建立数据库
  8. spark学习-JavaRDD注册成表然后用SparkSQL查询
  9. java 如何捕获线程中的异常处理_如何捕获Java中另一个线程抛出的异常?
  10. 中招了,重写TreeMap的比较器引发的问题...