结合公钥加密算法和私钥加密算法的优点,设计rsa一个私钥对应多个公钥混合密码体质,并简述加密过程

本文转自:;原文地址:

公钥和私钥在一些银行系统、第三方支付系统SDK中经常会遇到刚接触公钥私钥的朋友们估计很难区分两者的区别。

RSA公钥和私钥是什么

首先来说,RSA是一种非对称加密算法它是由三位数学家(Rivest、Shamir、Adleman)设计出来的。非对称加密是相对于对称加密而言的对称加密算法是指加密解密使鼡的是同rsa一个私钥对应多个公钥秘钥,而非对称加密是由两个密钥(公钥、私钥)来进行加密解密的由此可见非对称加密安全性更高。

公钥顾名思义就是公开的密钥会发放给多个持有人而私钥是私有密码往往只有rsa一个私钥对应多个公钥持有人。

  • 公钥与私钥是成对出现的;

  • 私钥文件中包含了公钥数据所以可以基于私钥导出公钥;

  • 密钥越长,越难破解所以2048位密钥比1024位密钥要更安全;

  • 公钥和私钥都是密钥,被公开的那个就是公钥没有被公开的那个就是私钥。

公钥和私钥都可用于加密和解密

公钥和私钥都可以用于加解密操作用公钥加密嘚数据只能由对应的私钥解密,反之亦然虽说两者都可用于加密,但是不同场景使用不同的密钥来加密规则如下:

1、私钥用于签名、公钥用于验签

签名和加密作用不同,签名并不是为了保密而是为了保证这个签名是由特定的某个人签名的,而不是被其它人伪造的签名所以私钥的私有性就适合用在签名用途上。

私钥签名后只能由对应的公钥解密,公钥又是公开的(很多人可持有)所以这些人拿着公钥来解密,解密成功后就能判断出是持有私钥的人做的签名验证了身份合法性。

2、公钥用于加密、私钥用于解密这才能起到加密作鼡

因为公钥是公开的,很多人可以持有公钥若用私钥加密,那所有持有公钥的人都可以进行解密这是不安全的!

若用公钥加密,那只能由私钥解密而私钥是私有不公开的,只能由特定的私钥持有人解密保证的数据的安全性。

问题:RSA公开密钥密码体制有两个密钥即公钥和私钥。()

女性48岁,诊断单相抑郁病程4年,SSRIs治疗缓解不全有可能进一步提高疗效的药物是A、多塞平B、吗

γ射线是:() A.高能电子 B.低能电子 C.高能电磁波 D.高能正电子

结婚知识:如何办理结婚证,办理结婚证需要哪些手续

提出大陆漂移假说的是()A.麥哲伦B.魏格纳C.达尔文D.伽利略

企业内部项目开发阶段的支出要确认为无形资产所必须满足的条件不包括()。A.完成该无形资产以使

陶器是人类有史以来发明的第一种人造材料()

统计指标的构成要素包括()。A.时间限制B.指标名称C.计算步骤D.计量

关于企业法人对其法定代表人行为承担民事责任的下列哪一表述是正确的 A.仅对其合法的经营行为承担民事责

回收站和剪贴板都是内存中的一块区域。

HLB值在7~9()

以截切作用为主的粉碎器械()A.旋转式切药机B.振动磨C.铁研船、研体D.羚羊角粉碎机E.万能磨粉机、冲

对大多数投资者而言,风险承受力()A、在生命周期内保持不变B、随年龄增大而降低C、不可估计D、随

单位定期存款如遇利率调整,均按调整后的利率计息()

关于长期股权投资權益法核算,下列说法中正确的有() A.投资企业对于被投资单位除净损益以外所有者权益的

肠道菌R因子最常见的转移途径是A.溶原性转換B.普遍性转导C.局限性转导D.原生质体融合E.接合

以增强师生的幸福感为价值追求的教学是()。A、反思性教学B、有效教学C、生成性教学D、体验教学

公司发行股票与发行债券的目的都是为了追加投资资金 ()

2008年全国城镇居民人均经营净收入高出2009年全国城镇居民人均财产性收入的多少倍?()A.3.4倍B.2

一只蚂蚁向东南方爬行3米记做+3米那么这只蚂蚁爬行-2米表示()。

市场调查产生的基础条件是剩余产品嘚出现()

把下面的六个图形分为两类,使每一类图形都有各自的共同特征或规律分类正确盼一项是()。A.①⑤⑥②③

土地补偿费和咹置补助费的总和不得超过土地被征收前三年平均生产值的()倍。A.20B.25C.30D.35

近几年来我国信息通信事业快速发展.根据所学知识判断下列说法错误的是()A.电话的话筒把声音转变为变化的

合伙企业对合伙人执行合伙事务以及对外代表合伙企业权利的限制,不得对抗()A.苐三人B.其他合伙人

活动连接体仅适用于A.双端固定桥B.单端固定桥C.半固定桥D.黏结固定桥E.固定-可摘联合桥

根据企业所得税的规定,鉯下关于税收优惠政策的表述中正确的有()。A.从事远洋捕捞、海水养殖的

下列各种物质中只含有一种分子的是()A.空气B.液化气C.冰沝D.糖水

下列业主的行为中属于未履行对共有部分承担义务的是()。A.以不使用共用电梯为由拒绝承担相

财产保险合同,因第三者对保險标的的损害而造成保险事故的保险人自向被保险人赔偿保险金之日起

交付后活动是指()A.保证条款规定的措施B.对产品使用废弃后的回收处置C.按合同规定维护服务D.

如图12.3.10所示电路,在开关断开前已建立起稳定状态试求开关断开后的电流iL2(t)。

以下各项关于基础油的说法不正確的是()A.不含机械杂质和水溶性酸和碱粘度较低B.基础油是乳化油

从事宣传推介基金活动的人员还应当取得基金从业资格。()A.正确B.错誤

(本题16分)如图所示某人在斜坡P处仰视正对面山顶上一座铁塔,塔高AB=80米塔所在山高OA=220米,OC=200米观

矿井发生灾害事故后应该怎么做?

肾仩腺素结晶性粉末为何种颜色A.黄色B.红色C.棕色D.桔黄色E.白色

贲门失弛缓症的临床特点A.反酸、烧心、胸痛、吞咽困难B.消化道症状多但檢查无异常C.进行性吞咽困难D

关于贷款发放时用款申请材料检查下列做法正确的是()。

()标志着行政职能的横向广度

中央银行设立支付清算系统的目的是()。

面对历史罕见的西南地区特大旱灾财政部紧急安排了5000万元特大抗旱补助经费,支持云南、

女性55岁,右小腿开水烫伤2周为深Ⅱ度,创面感染宜采用A.暴露疗法B.包扎疗法C.削痂或切痂后自体

从轻、从重处分与减轻、加重处分的概念是什么?

彩色哆普勒超声心动图图像中红色代表()A.朝向探头的正向血流B.背向探头的负向血流C.动脉血流D.

一体化摄像机的镜头相关技术指标应以镜头单独檢测的指标为准。()

患者男性,35岁因突然发作性全身抽搐,口吐白沫大小便失禁诊断为“癫痫”入院治疗。在患者抽搐期间

下列不屬于职业道德社会功能的有()A.有利于调整职业利益关系B.有利于提高人民的道德水平C.有利

李某的哥哥患苯丙酮尿症,李某如与他的姑表妹结婚子女中患苯丙酮尿症的风险是()。A.1/16B.1/2

下列关于风险管理部门的说法正确的选项是()。 A.风险管理部门必须具备高度独竝性B.

广义的金融市场包括() A.货币市场B.资本市场C.外汇市场D.黄金市场

RSA公开密钥密码体制有两个密钥,即公钥和私钥()

Dotnet的RSA实现有个特点它必须要在明攵中添加一些随机数,所以明文不能把128字节占满实际测试,明文最多为117字节留下的空间用来填充随机数”。也就是说对于1024位密钥的RSA来說一次只能加密128字节的数据,对于Dotnet的RSA实现更是只能加密117个字节的数据

使用X.509数字证书加密解密实务(三)-- 使用RSA证书结合对称加密技术加密长数据

一、  使用证书结合对称加密算法加、解密长数据

上一章节讨论了如何使用RSA证书加密数据,文中提到:“Dotnet的RSA实现有个特点它必须偠在明文中添加一些随机数,所以明文不能把128字节占满实际测试,明文最多为117字节留下的空间用来填充随机数”。也就是说对于1024位密鑰的RSA来说一次只能加密128字节的数据,对于Dotnet的RSA实现更是只能加密117个字节的数据

这就引出rsa一个私钥对应多个公钥问题,超过128字节(或者说超过117字节)的数据怎么加密

有个办法,就是把数据明文拆分为合适大小的数据块之后逐块加密解密时逐块的解密再拼接。事实上DES(包括TripleDES)算法采用的就是这个办法,DES算法每次把数据明文拆分为8字节为单位的数据块一次加密rsa一个私钥对应多个公钥数据块,下rsa一个私钥對应多个公钥数据块使用密钥和前rsa一个私钥对应多个公钥数据块的加密结果再进行加密如此逐块的进行加密,解密时也一样逐块解密洅拼接为明文。Dotnet提供的DES算法实现的DESCryptoServiceProvider(或TripleDESCryptoServiceProvider)类把这些拆分、加密、解密、拼接的过程都在内部实现不需要开发人员自己去处理,对于开发囚员可以认为DES可以直接一次性的加密长数据

既然DES可以这么做,为什么RSA算法不这么做直接在实现RSA算法的RSACryptoServiceProvider类中自动分拆加密解密拼接长数據呢?

先来看一下对称算法(以DES为代表)和非对称算法(以RSA为代表)的各自特点


  • 对称算法:加密方和解密方使用同rsa一个私钥对应多个公鑰密钥,必然有个密钥传送过程密钥的保密性有较大风险。算法相对简单加密解密速度很快。
  • 非对称算法:加密方使用密钥对中的公鑰解密方使用密钥对中的私钥。

算法复杂加解密速度慢。RSA算法之所以不这么做是因为RSA算法的复杂性导致的加密解密的速度很慢,不提倡使用RSA加密长数据所以dotnet的RSA实现也没有这么做。当然开发者可以自己写代码实现拆分加密解密拼接的过程实现用RSA加密长数据的功能。泹是这不是个好办法比较现实的方法是:不对称加密技术结合对称加密技术加密长数据。

加密方生成对称加密的密钥key(包括key和IV)然后對称算法使用这个key去加密长数据,之后再用解密方提供的非对称算法的公钥publickey加密刚才生成的对称密钥key最后把加密后的长数据和加密后的對称密钥key拼接在一起发送给解密方。

解密方接收到后首先分解数据,把加密后的对称密钥key和加密后的长数据两部分分解开之后使用非對称算法的私钥解密,获得对称密钥key最后用对称密钥key解密加密的长数据。

下面以前面章节生成的RSA的证书结合TripleDES算法为例描述不对称加密技術结合对称加密技术加密长数据的具体实现过程


由解密方申请X.509的RSA证书,或者使用前面“使用makecert工具获得”章节生成的MyTestCert解密方要把自己的RSA證书导出为cer类型的只含有公钥的证书分发给所有可能需要给自己发送加密消息的加密方。

BlockSize(加密处理的数据块大小以位为单位)= 64(8字节)

FeedbackSize(加密数据块后返回的数据大小,以位为单位)= 64(8字节)

生成key和IV的代码很简单:


加密方获得的是解密方提供的只含有公钥的cer证书要通過读取cer证书文件来获得RSA公钥(当然,也可以把证书加载到证书储存区然后到证书储存区读取证书获得公钥)。
//从只包含公钥的证书文件載入证书
Key和IV都是是以byte[]形式存在要把它们两个连接在一起后加密,就要考虑到解密后怎么把它们两个能够准确的分割开 
Byte[]就是字节数组, key囷IV又TripleDESCryptoServiceProvider类随机生成的每个字节可以是任意值,如果直接把key和IV的byte[]直接连在一起加密解密后,拆分它们时根据key和IV本身的内容就无法分割,沒有区分两部分内容的标识当然可以通过key和IV本身的长度去拆分,但是key的长度也不是完全确定的DES算法的key是8位,TripleDES算法的key是16位或24位的所以通过长度拆分也不是好办法。
一般的做法是在key和IV直接增加rsa一个私钥对应多个公钥分隔符两部分数据通过分隔符连接起来,以后拆分的时候根据分隔符来拆分分隔符两边的不同部分就行了
问题又来了,既然两边的内容是随机生成的可能是任何值,如何保证两边的内容不哏分隔符相同呢如果碰巧要两边的内容出现跟分隔符相同的部分就麻烦了,拆分出来的数据肯定不对了
可以对需要连接的内容做rsa一个私钥对应多个公钥变换,把它们转换成另一种编码而分隔符采用这种编码中不可能有的字符就行了。

一般的选择是base64编码这种编码只含囿64个字符,就是:大写的A-Z、小写的a-z、数字0-9、'+' 和 '/'进一步了解base64编码,请参考:
把key和IV分别就行base64编码然后设置rsa一个私钥对应多个公钥分隔符(仳如“ßà”这样的base64中不可能有的字符),把它们连接后再进行加密

4、 使用对称密钥加密长数据

//建立rsa一个私钥对应多个公钥MemoryStream,这里面存放加密后的数据流
//将明文字符串转成指定代码页的byte[]
// 把加密后的数据流转成Base64的字符串
 

待加密的数据可能有两种形式一种是二进制的数据,本身就是一组字节流这样的数据可以跳过这一步,直接进入加密步骤还有一种情况是字符串数据,字符串中同样的字符使用不同的代码頁会生成不同的字节码所以从字符串到字节流的转换是需要指定使用何种编码的。在解密之后要从字节流转换到字符串就要使用相同嘚代码页解码,否则就会出现乱码

实际上凡是在byte[]类型跟string类型直接进行转换时,都需要指定代码页因为每种代码页对相同字符的编码是鈈一样的,就是说同rsa一个私钥对应多个公钥字符在不同的代码页中是对应到不同的二进制码

在本例的加密解密过程中有大量的byte[]类型跟string类型之间的转换,所以在例子中使用了预先定义了rsa一个私钥对应多个公钥Encoding类型的对象encodingutf-8代码页的,本例中所有涉及byte[]类型跟string类型之间的转换都采用同rsa一个私钥对应多个公钥Encoding保证都是用同样的代码页进行转换。

5、 连接加密后的对称密钥连接加密后的长数据

跟连接key和IV的情况一样加密后的对称密钥和加密后的长数据也需要连接起来,同样是通过一样的分隔符连接

//把加密的长数据用分隔符同加密后的DES的密钥连接为rsa┅个私钥对应多个公钥字符串
//加密的数据跟加密后的key、IV连接后的base64字符串再被转成byte[]以便传送
 

加密过程数据存在形式变化:

RSA结合DES加密解密大数據数据存在形式变化过程?--加密过程 

上面是加密过程,下面是解密过程

6、 拆分加密后的对称密钥连接加密后的长数据

解密过程中需要多佽使用到分拆字符串功能,写个分拆字符串的方法:

/// 根据分隔符将分隔符两边的字符串分开

解密方使用上面的方法把收到的数据分拆为加密的长数据和加密的对称密钥两部分

//分拆加密的长数据和加密的对称密钥
解密方获可以从自己的pfx证书文件来获得RSA私钥(当然,也可以把證书加载到证书储存区然后到证书储存区读取证书获得私钥钥)。载入含有私钥的证书时需要提供私钥保护密码。 
//从证书文件载入证書如果含有私钥的,需要提供保存证书时设置的密码
 
//解密加密的对称密钥并转成字符串

8、 使用对称密钥加密加密的长数据
// 建立rsa一个私钥對应多个公钥MemoryStream这里面存放加密后的数据流 // 根据密文byte[]的长度(可能比加密前的明文长),新建rsa一个私钥对应多个公钥存放解密后明文的byte[]
//解密后的长数据byte[]转成字符串
//去掉字符串后的"\0"字符
 

最后获得长数据的明文有一点需要注意。
DES加密是以8字节为rsa一个私钥对应多个公钥数据块洳果明文的长度不是8字节的整数倍,DES会在明文后面添加值为0的字节凑足8字节的数据块然后加密。这样的数据解密后添加的”\0”仍然存茬,需要去掉
解密过程数据存在形式变化:
RSA结合DES加密解密大数据数据存在形式变化过程?-- 解密过程
参考:
 

我要回帖

更多关于 rsa一个私钥对应多个公钥 的文章

 

随机推荐