[crypto]-05-转载:PKCS #1 RSA Encryption Version 1.5介绍
转载:https://www.cnblogs.com/spencerN/archive/2012/10/18/2729602.html
在进行RSA运算时需要将源数据D转化为Encryption block(EB)。其中pkcs1padding V1.5的填充模式安装以下方式进行
(1) EB = 00+ BT+PS +00 + D
说明
EB:为转化后Hex进制表示的数据块,长度为128个字节(密钥1024位的情况下)
00:开头为00。个人认为应该是一个保留位。因为目前BT的类型至于三种(00,01,02)一个字节就可以表示。
BT:用一个字节表示,在目前的版本上,有三个值00 01 02,如果使用公钥操作,BT永远为02,如果用私钥操作则可能为00或01。
PS:为填充位PS由k-3-D这么多个字节构成,k表示密钥的字节长度,如果我们用1024bit的RSA密钥,这个长度就是1024/8=128 ,D表示明文数据D的字节长度
对于BT为00的,则这些字节全部为00,对于BT为01的这些值全部为FF,对于BT为02的,这些字节的值随机产生但不能是0字节(就是00)。
00:在源数据D前一个字节用00表示
D:实际源数据
公式(1)整个EB的长度就是密钥字节的长度。
对于BT为00的,数据D中的数据就不能以00字节开头,要不然会有歧义,因为这时候你PS填充的也是00,就分不清哪些是填充数据哪些是明文数据了
但如果你的明文数据就是以00字节开头怎么办呢?对于私钥操作,你可以把BT的值设为01,这时PS填充的FF,那么用00字节就可以区分填充数据和明文数据对于公钥操作,填充的都是非00字节,也能够用00字节区分开。如果你使用私钥加密,建议你BT使用01,保证了安全性。
对于BT为02和01的,PS至少要有8个字节长,BT为02肯定是公钥加密,01肯定是私钥加密,要保证PS有八个字节长
因为EB= 00+BT+PS+00+D=k
所以D<=k-11,所以当我们使用128字节密钥对数据进行加密时,明文数据的长度不能超过过128-11=117字节
当RSA要加密数据大于 k-11字节时怎么办呢?把明文数据按照D的最大长度分块然后逐块加密,最后把密文拼起来就行。
英文文档参考RFC 2313 PKCS #1: RSA Encryption
相关推荐:
[crypto]-01-对称加解密AES原理概念详解
[crypto]-02-非对称加解密RSA原理概念详解
[crypto]-03-数字摘要HASH原理概念详解
[crypto]-04-国产密码算法(国密算法sm2/sm3/sm4)介绍
[crypto]-05-转载:PKCS #1 RSA Encryption Version 1.5介绍
[crypto]-05.1-PKCS PKCS#1 PKCS#7 PKCS#11的介绍
[crypto]-06-CA证书介绍和使用方法[crypto]-30-The Armv8 Cryptographic Extension在linux中的应用
[crypto]-31-crypto engion的学习和总结[crypto]-50-base64_encode和base64_decode的C语言实现
[crypto]-51-RSA私钥pem转换成der, 在将der解析出n e d p q dp dq qp
[crypto]-52-python3中rsa(签名验签加密解密)aes(ecb cbc ctr)hmac的使用,以及unittest测试用
[crypto]-53-openssl命令行的使用(aes/rsa签名校验/rsa加密解密/hmac)[crypto]-90-crypto的一些术语和思考
[crypto]-05-转载:PKCS #1 RSA Encryption Version 1.5介绍相关推荐
- PKCS #1 RSA Encryption Version 1.5
PKCS #1 RSA Encryption Version 1.5 在进行RSA运算时需要将源数据D转化为Encryption block(EB).其中pkcs1padding V1.5的填充模式 ...
- [crypto]-05.1-PKCS PKCS#1 PKCS#7 PKCS#11的介绍
相关推荐: [crypto]-01-对称加解密AES原理概念详解 [crypto]-02-非对称加解密RSA原理概念详解 [crypto]-03- ...
- [crypto]-02-非对称加解密RSA原理概念详解
说明:本文使用的数据来自网络,重复的太多了,也不知道哪篇是原创. 算法原理介绍 step 说明 描述 备注 1 找出质数 P .Q - 2 计算公共模数 N = P * Q - 3 欧拉函数 φ(N) ...
- 示例 在 ABAP 中使用自己的 RSA 实现 RSA Encryption in ABAP
在下面的程序中,我们使用公钥加密并使用私钥签名此消息"32字节秘密消息!". 结果显示在屏幕上. 它们保存在我们生成密钥以在 SAP 外部检查它们的同一文件夹中. 签名通常涉及对消 ...
- Crypto++库实现AES和RSA加密解密
本文介绍使用Crypto++进行AES加密和RSA加密 Crypto++库在VS中配置方法 Crypto++库下载地址: https://www.cryptopp.com/, 目前已经更新到8.1版本 ...
- 使用Crypto++5.5.2完成RSA加解密,真正的把公钥放在字符串内,而不是放在文件内
本文摘自 小楼一夜听春雨得博客: http://hi.baidu.com/magic475/blog/item/e8b82139020ae622b8998f96.html 使用Crypto++5.5. ...
- PKCS#1 v2.1 RSA Cryptography Standard (PKCS#1 RSA密码学规范,版本2.1)
PKCS#1 v2.1: RSA密码学规范 RSA实验室 2002年6月14日 --翻译:CaesarZou (zoudeqiang1979@tsinghua.org.cn) 1.介绍 这个文档提供了 ...
- Windows自带的加密算法Crypto实现MD5, AES256以及RSA算法
密码学我了解的很少,但是在逆向中这却是非常重要的基础.这个Crypto函数库是windows自带的,我实现了散列算法MD5[128位], 对称加密算法AES[256位]以及RSA算法.散列函数实现改几 ...
- 合宙Air105|CRYPTO|加密与解密|算法|RSA|HASH函数| BASE64|MD5|SHA1|SHA256|CRC|官方demo|学习(4):CRYPTO(加密与解密)
基础资料 基于Air105开发板:Air105 - LuatOS 文档 上手:开发上手 - LuatOS 文档 探讨重点 对官方CRYPTO(加密与解密) 功能的复现,进行相关内容的学习及探讨. 实现 ...
最新文章
- java的基本数据类型有
- 分享一个在线考试系统,练手项目用他很香
- 转-Kafka【第一篇】Kafka集群搭建
- 主要矛盾和次要矛盾_次要GC,主要GC与完整GC
- 如何清理和维护计算机,电脑的优化与维护操作教程
- 分类数据显示功能_缓存优化
- 【JAVA面试】java面试题整理(4)
- 转 ---《协程小结》
- Linux 在线词典
- Python数据挖掘-文本挖掘
- EGO1—实现计数器74HC163
- linux 操作excel文件,Linux下输出excel文件
- 关于c语言学习的建议
- java中任何变量都可以被赋值为null,java中当给一个对象赋值为null时发生了什么...
- 分组密码以及分组密码的模式
- 常用英语口语175句
- linux系统给安卓root权限,安卓手机该如何获取Root权限?方法很简单,但不建议Root...
- 【考研初试】问题汇总及解答
- 深度学习 图像识别 三
- 【C#】(二维) 直线外一点在直线上的投影点
热门文章
- linux mkfs.ext3 参数,linux命令mkfs.ext3用法[阮胜昌]
- 绿色计算在数据中心的应用及节能效果浅析
- CSDN:解决粉丝网友集中问题留言处,把你所有的问题在留言处留言,我会一一回答
- AI:2020年6月23日北京智源大会演讲分享之智能信息检索与挖掘专题论坛——09:10-09:55裴健教授《智能搜索:从工具到思维方式和心智》
- DL之InceptionV2/V3:InceptionV2 InceptionV3算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
- 任务间通信的基本知识
- dedecms织梦修改标题默认长度
- Android ContentProvider、ContentResolver和ContentObserver的使用
- 前端开发代码架构相关想法
- [BZOJ1015] [JSOI2008] 星球大战starwar (并查集)