最近在做一个项目中需要,在android对一个密码字段首先进行

一次md5加密后再进行一次rsa加密,然后把加密的结果通过

json协议传输给nginx服务器进行解密。在android中,可以直接

使用java提供Cipher类来进行加密,nginx服务器使用openssl来进行解密。

android客户端使用RSA加密的字段,要使nginx服务器能正常解密,

这里需要客户端和服务器统一RSA加密所用的填充方式。

RSA加密常用的填充方式有下面3种:

1.RSA_PKCS1_PADDING 填充模式,最常用的模式

要求:

输入:必须 比 RSA 钥模长(modulus) 短至少11个字节, 也就是 RSA_size(rsa) – 11

如果输入的明文过长,必须切割, 然后填充

输出:和modulus一样长

根据这个要求,对于512bit的密钥, block length = 512/8 – 11 = 53 字节

2.RSA_PKCS1_OAEP_PADDING

输入:RSA_size(rsa) – 41

输出:和modulus一样长

3.for RSA_NO_PADDING  不填充

输入:可以和RSA钥模长一样长,如果输入的明文过长,必须切割, 然后填充

输出:和modulus一样长

跟DES,AES一样, RSA也是一个块加密算法( block cipher algorithm),总是在一个固定长度的块上进行操作。

但跟AES等不同的是, block length是跟key length有关的。

每次RSA加密的明文的长度是受RSA填充模式限制的,但是RSA每次加密的块长度就是key length。

需要注意:

假如你选择的秘钥长度为1024bit共128个byte:

1.当你在客户端选择RSA_NO_PADDING填充模式时,如果你的明文不够128字节

加密的时候会在你的明文前面,前向的填充零。解密后的明文也会包括前面填充的零,这是服务器需要注意把解密后的字段前向填充的

零去掉,才是真正之前加密的明文。

2.当你选择RSA_PKCS1_PADDING填充模式时,如果你的明文不够128字节

加密的时候会在你的明文中随机填充一些数据,所以会导致对同样的明文每次加密后的结果都不一样。

对加密后的密文,服务器使用相同的填充方式都能解密。解密后的明文也就是之前加密的明文。

3.RSA_PKCS1_OAEP_PADDING填充模式没有使用过, 他是PKCS#1推出的新的填充方式,安全性是最高的,

和前面RSA_PKCS1_PADDING的区别就是加密前的编码方式不一样。

https://www.cnblogs.com/lzl-sml/p/3501447.html

java rsa padding_rsa加密--选择padding模式需要注意的问题。。。相关推荐

  1. JAVA RSA算法加密实现 eclipse

    RSA算法加密实现 一.实验目的 学习经典的RSA公钥加密算法的基本原理和特点,能够编写简单的代码实现RSA公钥加密和私钥解密的过程. 二.实验要求 1. 熟悉RSA公私钥加密算法. 2. 掌握如何使 ...

  2. java RSA非对称加密详解

    简介 RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.1987年首次公布,当 ...

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

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

  4. RSA非对称加密简析-java

    1 非对称加密算法 1.1 概述 1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,允许在不安全的媒体上的通讯双方交换信息,安全地达成一致的密钥,这 ...

  5. java实现双向RSA + AES加密

    本文主要讲解在APP上如何实现双向RSA + AES加密. 先上一张主要流程图: 场景预设: 由于客户端是APP而不是网页,APP在第一次加载的时候会生成一对RSA秘钥对(我们称它为APP公钥私钥,不 ...

  6. java编码解码加密解密--md5、SHA-256、SHA-512、MAC、DES、AES、RSA

    md5 md5是一种散列算法,不可逆,是一种消息摘要算法,生成的字节数组的长度是128位,也就是等于16个字节,那么有的字节转化为字符之后,这些字符不一定是存在于ascii码之中,通常为了便于输出,我 ...

  7. java RSA加密解密--转载

    原文地址:http://www.blogjava.net/icewee/archive/2012/05/19/378570.html 该工具类中用到了BASE64,需要借助第三方类库:javabase ...

  8. CryptoAPI与openssl RSA非对称加密解密(PKCS1 PADDING)交互

    (以下代码中都只做测试用,有些地方没有释放内存...这个自己解决下) 1.RSA非对称的,首先提供一个供测试用的证书和私钥的数据 1)pem格式的证书和私钥(公私钥是对应的)的base64编码 [cp ...

  9. RSA加密的填充模式

    http://blog.chinaunix.net/uid-21880738-id-1813144.html 跟DES,AES一样, RSA也是一个块加密算法( block cipher algori ...

最新文章

  1. POJ2318 TOYS / POJ2398Toy Storage判断点与直线位置关系 【计算几何】
  2. linux启动redis_Redis简介
  3. java的character用法_Java中Character类的使用方法
  4. AT2675 [AGC018F] Two Trees(欧拉回路)
  5. JSON字符串和实体类的相互转化
  6. YUM源安装,FTP安装
  7. java中输出拼json,java poi 解析excel 输出json 并且拼接字符串显示到jsp
  8. Windows Server 2008 R2从低版本升级到高版本
  9. 话说地址栏的URL的最大长度
  10. USB 协议Audio应用
  11. 快速下载各类网页视频插件~COCOCUT
  12. oracle rat结果分析比较,Oracle RAT介绍及最佳实践
  13. 老男孩教育侵权之后使出了八大“绝招“,撒谎水平爆炸!真相在这里!
  14. Gitlab项目上传
  15. 免费的计算机一级操作系统,计算机一级题题库,第二章操作系统
  16. ETL:WJLYZQWDD
  17. 蚂蚁森林能量java_使用autojs实现自动拾取蚂蚁森林能量与偷取朋友能量
  18. 手把手教echarts中gexf关系图的构造和使用
  19. 如何安装CocoaPods
  20. csp-j 模拟题2

热门文章

  1. java jdk1.8 API
  2. Oracle 安全性一
  3. Python撰写mail
  4. Python 爬虫实战2 百度贴吧帖子
  5. ThinkPHP 3.1.2 控制器的模块和操作
  6. 6月6号=》80页-100页
  7. 用JS写二级导航(下拉菜单)
  8. Oracle中针对层次数据所设计的专用SQL查询语句
  9. C-Lodop的https扩展版,火狐下添加例外
  10. java_web学习(六) request对象中的get和post差异