展开全部

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

要求:

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

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

输出 和modulus一样长

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

2) RSA_PKCS1_OAEP_PADDING

RSA_size(rsa) – 41

3)for RSA_NO_PADDING 不填充

RSA_size(rsa)

一般来说, 我们只用RSA来加密重要的数据,比如AES的key, 128bits = 16

加密的输出,总是等于key length

对同样的数据,用同样的key进行RSA加密, 每次的输出都会不一样; 但是这些加密的结果都能正确的解密

—————

预备知识

I2OSP – Integer-to-Octet-String primitive 大整数转换成字节串

I2OSP (x, xLen)

输入: x 待转换的非负整数

xLen 结果字节串的可能长度

————

加密原理 RSAEP ((n, e), m)

输入: (n,e) RSA公钥

m 值为0到n-1 之间一个大整数,代表消息

输出: c 值为0到n-1之间的一个大整数,代表密文

假定: RSA公钥(n,e)是有效的

步骤:

1. 如果m不满足 0 2. 让 c = m^e % n (m的e次幂 除以n ,余数为c)

3. 输出 c

解密原理 RSADP (K, c)

输入: K RSA私钥,K由下面形式:

一对(n,d)

一个五元组(p, q, dP, dQ, qInv)

一个可能为空的三元序列(ri, di, ti), i=3,...,u

c 密文

输出: m 明文

步骤:

1. 如果密文c不满足 0 < c < n-1, 输出 'ciphertext repersentative out of range'

2. 按照如下方法计算m:

a. 如果使用私钥K的第一种形式(n, d), 就让 m = c^d % n (c的d次幂,除以n,余数为m)

b. 如果使用私钥K的第二种像是(p,q, dP, dQ, qInv)和(ri, di, ti),

--------------

----------------

加密 RSAES-PKCS1-V1_5-ENCRYPT ((n, e), M)

输入: (n, e) 接收者的公开钥匙, k表示n所占用的字节长度

M 要加密的消息, mLen表示消息的长度 mLen ≤ k – 11

输出: C 密文, 占用字节数 也为 k

步骤:

1.长度检查, 如果 mLen > k-11, 输出 “message too long”

2. EME-PKCS1-v1_5 编码

a) 生成一个 伪随机非零串PS , 长度为 k – mLen – 3, 所以至少为8, 因为 k-mLen>11

b) 将PS, M,以及其他填充串 一起编码为 EM, 长度为 k, 即:

EM = 0×00 || 0×02 || PS || 0×00 || M

3.RSA 加密

a)将EM转换成一个大证书m

m = OS2IP(EM)

b)对公钥(n,e) 和 大整数 m, 使用RSAEP加密原理,产生一个整数密文c

c = RSAEP((n,e0, m)

c)将整数c转换成长度为k的密文串

C = I2OSP(c, k)

4.输出密文C

—————-

解密 RSAES-PKCS1-V1_5-DECRYPT (K, C)

输入: K 接收者的私钥

C 已经加密过的密文串,长度为k (与RSA modulus n的长度一样)

输出: M 消息明文, 长度至多为 k-11

步骤:

1. 长度检查:如果密文C的长度不为k字节(或者 如果 k<11), 输出“decryption error"

2. RSA解密

a. 转换密文C为一个大整数c

c = OS2IP(C)

b. 对RSA私钥(n,d)和密文整数c 实施解密, 产生一个 大整数m

m = RSADP((n,d), c)

如果RSADP输出'ciphertext representative out of range'(意味c>=n), 就输出’decryption error”

c. 转换 m 为长度为k的EM串

EM = I2OSP(m, k)

3. EME-PKCS1-v1_5 解码:将EM分为 非零的PS串 和 消息 M

EM = 0×00 || 0×02 || PS || 0×00 || M

如果EM不是上面给出的格式,或者PS的长度小于8个字节, 那么就输出’decryption error’

5. 输出明文消息M

——————–

签名 RSASSA-PSS-SIGN (K, M)

输入 K 签名者的RSA私钥

M 代签名的消息,一个字节串

输出 S 签名,长度为k的字节串,k是RSA modulus n的字节长度

步骤:

1. EMSA-PSS encoding: 对消息M实施EMSA-PSS编码操作,产生一个长度为 [(modBits -1)/8]的编码消息EM。 整数 OS2IP(EM)的位长最多是 modBits-1, modBits是RSA modulus n的位长度

EM = EMSA-PSS-ENCODE (M, modBits – 1)

注意:如果modBits-1 能被8整除,EM的字节长比k小1;否则EM字节长为k

2. RSA签名:

a. 将编码后的消息 EM 转换成一个大整数m

m = OS2IP(EM)

b. 对私钥K和消息m 实施 RSASP1 签名,产生一个 大整数s表示的签名

s = RSASP1 (K, m)

c. 把大整数s转换成 长度为k的字串签名S

S = I2OSP(s, k)

3.输出签名S

———–

验证签名 RSASSA-PSS-VERIFY ((n, e), M, S)

输入: (n,e) 签名者的公钥

M 签名者 发来的消息,一个字串

S 待验证的签名, 一个长度为k的字串。k是RSA Modulus n的长度

输出: ’valid signature’ 或者 ‘invalid signature’

步骤:

1. 长度检查: 如果签名S的长度不是k, 输出’invalid signature’

2. RSA验证

a) 将签名S转换成一个大整数s

s = OS2IP (S)

b) 对公钥 (n,e) 和 s 实施 RSAVP1 验证, 产生一个 大整数m

m = RSAVP1 ((n, e), s)

c) 将m 转换成编码的消息EM,长度 emLen = [ (modBits -1)/8 ] 字节。 modBits是RSA modulus n的位长

EM = I2OSP (m, emLen)

注意: 如果 modBits-1可以被8整除,那么emLen = k-1,否则 emLen = k

3. EMSA-PSS验证: 对消息M和编码的EM实施一个 EMSA-PSS验证操作,决定他们是否一致:

Result = EMSA-PSS-VERIFY (M, EM, modBits – 1)

4. 如果Result = “consistent“,那么输出 ”valid signature”

否则, 输出 ”invalid signature”

———–

签名,还可以使用 EMSA-PKCS1-v1_5 encoding编码方法 来产生 EM:

EM = EMSA-PKCS1-V1_5-ENCODE (M, k)

验证签名是,使用 EMSA-PKCS1-v1_5对 M产生第2个编码消息EM’

EM’ = EMSA-PKCS1-V1_5-ENCODE (M, k) .

然后比较 EM和EM’ 是否相同

———————

RSA的加密机制有两种方案一个是RSAES-OAEP,另一个RSAES-PKCS1-v1_5。PKCS#1推荐在新的应用中使用RSAES- OAEP,保留RSAES-PKCS#1-v1_5跟老的应用兼容。它们两的区别仅仅在于加密前编码的方式不同。而加密前的编码是为了提供了抵抗各种活动的敌对攻击的安全机制。

PKCS#1的签名机制也有种方案:RSASSA-PSS和RSASSA-PKCS1-v1_5。同样,推荐RSASSA-PSS用于新的应用而RSASSA-PKCS1-v1_5用于兼容老的应用。

——————–

RSAES-OAEP-ENCRYPT ((n, e), M, L)

选项: Hash 散列函数(hLen 表示 散列函数的输出的字节串的长度)

MGF 掩码生成函数

输入: (n,e) 接收者的RSA公钥(k表示RSA modulus n的字节长度)

M 待加密的消息,一个长度为mLen的字节串 mLen <= k - 2 hLen -2

L 同消息关联的可选的标签,如果不提供L,就采用空串

输出: C 密文,字节长度为k

步骤:

1.长度检查

a. 如果L的长度超过 hash函数的输入限制(对于SHA-1, 是2^61 -1),输出 label too long

b. mLen > k – 2hLen -2, 输出 message too long

2. EME-OAEP编码

说实话,我看了很久不太懂。。。。。。。

本回答被提问者采纳

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

rsa 公 填充模式的_RSA中pkcs1的填充方法具体是什么?相关推荐

  1. rsa 公 填充模式的_RSA加密的填充模式

    跟DES,AES一样, RSA也是一个块加密算法( block cipher algorithm),总是在一个固定长度的块上进行操作. 但跟AES等不同的是, block length是跟key le ...

  2. python123填充颜色_WPS表格中如何设置图案填充颜色透明度?,值得收藏

    在制作WPS表格中,会插入一些图案进入工作表.由于工作需要,可能会设置图案填充颜色的透明度,接下来小编为大家介绍下其具体操作步骤: 工具/材料 WPS办公软件 操作方法 01 在桌面上双击WPS表格的 ...

  3. RSA公私钥格式分析及其在Java和Openssl之间的转换方法

    文章目录 PKCS#1和PKCS#8 X.509公钥证书 ASN.1抽象语法标记 DER和PEM编码 OID对象标识符 用openssl命令生成PKCS1#格式的RSA密钥对 生成私钥 从私钥中导出公 ...

  4. MFC之学习多边形绘制、阴影模式、多边形填充模式与绘制实心五角星

    1.笔记 1.1绘制多边形函数 BOOL CDC::Polygon(LPPOINT lpPoints,int nCount); lpPoints是多边形顶点数组名,数组中每个点是CPoint对象(或称 ...

  5. Python中缺失值的填充

    Python中缺失值的填充 文章目录 Python中缺失值的填充 0 常用方法 1 填充None 2 填充众数 3 检查是否含有缺失值 0 常用方法 ​ 在Python中最常用的处理数据格式为Data ...

  6. RSA加密的填充模式

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

  7. java中使用openssl生成的rsa公私钥进行数据加解密_使用openssl生成RSA公钥和私钥对...

    在ubuntu上要使用openssl的话需要先进行安装,命令如下: sudo apt-get install openssl 安装完成就可以使用openssl了. 首先需要进入openssl的交互界面 ...

  8. python rsa加密二进制文件_用Python中的RSA加密文件

    公钥密码通常只用于少量数据.它很慢,很难正确使用.通常的做法是使用其他方法将非对称问题减少到由共享密钥提供安全性的问题,然后使用公钥加密来保护该共享密钥.例如:要加密文件,随机生成块或流密码(例如AE ...

  9. 加密模式||填充模式

    加密模式:https://docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.html ECB ECB : Electronic codeboo ...

最新文章

  1. PDC - C#4.0 以及未来
  2. linux 新用户 界面登录,如何在Linux系统登录界面加入个性化提示信息
  3. 五子棋java判断平局_2020-10-03 Java初级项目——从零开始制作一个简易五子棋游戏...
  4. vue-router 的常见用法
  5. input添加disabled属性出现的移动端兼容问题
  6. 数据中心机房谐波治理
  7. OpenYurt 深度解读|开启边缘设备的云原生管理能力
  8. c++协程4 (boost::coroutine)
  9. 面试必会系列 - 3.1 Redis知识点大汇总(数据类型,内存模型,持久化,缓存击穿,集群,一致性哈希等等)
  10. 执行shell出现bad interpreter
  11. One-hot encoding 独热编码
  12. 排序——宇宙总统(洛谷 P1781)
  13. mysql font连接数据库_MySQL-Front连接数据库的详细操作流程
  14. Python中文件的读写、写读和追加写读三种模式的特点
  15. 自动登录SAP系统(流星程序集之十八)
  16. maria安装包mysql_mariadb安装
  17. 收藏!这37个自学网站,一年让你省下十几万
  18. 问题 F: 求一个3*3矩阵对角线元素之和
  19. 三星量子计算机,全球首款量子手机来了,某厂商是秀肌肉还是蹭流量?
  20. RS485学习(一)

热门文章

  1. SecureCRT中的Ctrl+C不可用
  2. 当微软谈AI时,我似乎忘了还有其它人工智能公司
  3. 专注安防监控,雄迈消费类产品全线标配AI功能,让家用类监控更智能
  4. 微信未验证应用(微信openSDK1.8.6的集成)
  5. 蓝桥杯单片机设计与开发⑫ ---超声波模块
  6. 群表示论之用诱导表示求D4和Q8的不可约表示
  7. 别了,腾讯微博!仅比新浪晚8个月,用户超3亿,马化腾曾亲自宣传,刚刚宣布即将关停...
  8. 计算机软件中级职称专业哪个容易考,计算机软考中级职称哪个最容易考
  9. 报表控件ActiveReports帮助高校实现办公、财务管理数字化
  10. 自考计算机网络原理简答题,自考计算机网络原理简答题汇总.doc