rsa加密--选择padding模式需要注意的问题。。。
最近在做一个项目中需要,在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
相关文章
- C++之单例模式
- python设计模式之单例模式(一)
- 技术分享 | 接口自动化测试之JSON Schema模式该如何使用?
- iOS静音模式开启视频声音
- Java描述设计模式(03):工厂方法模式
- 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获
- VMware仅主机模式虚拟机无法ping通物理机
- 分组加密的四种模式(ECB、CBC、CFB、OFB)
- JSON-Schema 最科学的表单验证模式
- RabbitMQ从入门到精通(一) - 简介与安装(Docker和非Docker模式)
- JS模式:简单的图书馆享元模式
- 《超越需求:敏捷思维模式下的分析》—第2章 2.5节切记
- 《敏捷软件开发:原则、模式与实践(C#版.修订版)》—第2章2.1节极限编程实践
- 单例模式的8种写法
- php AES cbc模式 pkcs7 128位加密解密(微信小程序)
- 高擎信息安全大旗,打造“互联网+”新服务模式
- 设计模式之美:Structural Patterns(结构型模式)
- Android KK后为何工厂模式下无法adb 无法重新启动机器 ?
- 命令模式
- iOS设计模式 - 命令模式
- Photoshop中27种图层混合模式原理图文详解