苹果签名

iphoneqm
首页 > 苹果签名 > 正文内容

实战篇-OpenSSL之RSA算法-加密与数字签名

admin1年前 (2024-12-19)苹果签名441

  本文属于《OpenSSL加密算法库使用系列教程》之一,欢迎查看其它文章。

实战篇-OpenSSL之RSA算法-加密与数字签名

  RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。

  RSA属于非对称加密,与对称加密算法不同,RSA是由一对密钥来进行加解密的过程,分别称为公钥和私钥。

  具体的加密原理,就不进行介绍了,本文主要从使用角度,进行说明。

  以下命令行和编程实现,均基于OpenSSL开源库。在命令行中,我们可以使用命令实现对文件加解密,以验证我们的编程实现,是否正确。

  接下来,通过命令行方式来演示,如何使用RSA算法进行加解密,以及数字签名。

  生成私钥文件private.pem:

  这里-out指定生成文件的。需要注意的是这个文件包含了公钥和密钥两部分,也就是说这个文件即可用来加密也可以用来解密。后面的1024是生成密钥的长度。

  根据私钥private.pem提取出公钥public.pem:

  -in指定输入文件,-out指定提取生成公钥的文件名。至此,我们手上就有了一个公钥,一个私钥(包含公钥)。现在可以将用公钥来加密文件了。

  大家都知道公钥加密,私钥解密。

  我们在目录中创建一个hello的文本文件,然后利用此前生成的公钥加密文件。

  加密:

  -in指定要加密的文件,-inkey指定密钥,-pubin表明是用纯公钥文件加密,-out为加密后的文件。

  解密:

  -in指定被加密的文件,-inkey指定私钥文件,-out为解密后的文件。

  至此,一次加密解密的过程告终。

  参考:blogs/aLittleBitCool/archive/2011/09/22/2185418.html

  数字签名分为摘要和加密两部分,但是在openssl提供的指令中,并没有区分两者。需要注意的是,签名是指对明文的摘要进行加密,得到的密文就称为签名,而非对明文数据进行加密。

  大家都知道私钥签名,公钥验签。

  签名:

  使用dgst指令指定sha1算法,对hello.txt进行签名,生成签名文件sign.txt

  验签:

  先根据私钥private.pem提取出公钥public.pem

  使用RSA公钥验证签名(verify参数)

  验证成功,如下:

  另外,大家都知道可以从私钥文件中提取公钥文件,所以验签时,也可以直接用私钥文件来验签。如下,使用RSA私钥验证签名(prverify参数),验证成功。

  疑问:为什么可以从私钥导出公钥,而不能从公钥导出私钥?

  从公钥导出私钥,实际上等同于RSA被破解,理论上,RSA可以被破解,但是随着key越长,其破解难度越大。

  目前被破解的最长RSA密钥就是768位,因此就常见的RSA 1024位及以上,基本上是不能被破解的。也就是说公钥导出私钥是不成立的。

  所以,OpenSSL中可以由私钥导出公钥,猜测应该是私钥的容器往往同时包含私钥与公钥(公钥是让所有人都会知道,那么拥有私钥的人没有道理不留存一份公钥),而公钥的容器仅包含公钥。

  参考:blogs/yanhuang/p/9646578.html

  接下来,通过编程方式来演示,如何使用RSA算法进行加解密,以及数字签名。

  这里重点讲一下,RSA加密/解密函数的使用注意点,其他的生成密钥/签名之类的,无非是看看函数帮助就ok。

  (1)加密函数RSA_public_encrypt

  参数名称含义flen明文数据长度字节数,若padding参数使用RSA_PKCS1_PADDING方式,则该值最大为所使用密钥的位数 / 8 - 11from明文数据to存放生成的密文数据,该空间大小应该为秘钥位数 / 8,保证可以存放的下rsa公钥padding填充方式

  RSA_public_encrypt一次性只能加密(密钥的位数 / 8 = N)字节的数据,且加密前后数据长度相等。

  比如对于1024bit的密钥,可一次性加密128字节,由于采用RSA_PKCS1_PADDING填充,填充需要占用11字节,故真正的明文数据,最多只占128-11=117字节。当实际明文数据过长时,应采用分段加密,并将加密结果拼到一起即可。详细参考:《RSA密钥长度、明文长度和密文长度》。

  (2)解密函数RSA_private_decrypt

  参数名称含义flen密文数据长度,一般固定为秘钥位数 / 8from密文数据to存放解密后的明文数据,该空间大小应该为秘钥位数 / 8,保证可以存放的下rsa私钥padding填充方式

  与RSA_public_encrypt类似,RSA_private_decrypt也是一次性只能解密(密钥的位数 / 8 = N)字节的数据,且解密前后数据长度相等。

  返回值:以RSA 1024为例,表示将一段128字节的密文,进行解密,并解除填充,得到的实际明文数据,该数据的长度,作为函数返回值。该返回值,可以用于从to参数指向的内存中,提取实际长度的明文数据。

  (1)生成密钥对

  封装了2个函数,一个生成秘钥对文件,一个生成秘钥对的内存数据。

  (2)数据加解密

  包含一对加密、解密函数。该函数可执行对任意长度明文加密,并进行解密。

  (3)数字签名与验签

  包含一对签名、验签函数。

  (4)测试代码

  执行结果:

  对生成的(1x1024x1024+3)字节的测试数据,进行了加解密验证,SHA256摘要签名验签,均测试成功。

  本文涉及工程代码地址:gitee/bailiyang/cdemo/tree/master/Qt/49OpenSSL/OpenSSL

  若对你有帮助,欢迎点赞、收藏、评论,你的支持就是我的最大动力!!!

  同时,阿超为大家准备了丰富的学习资料,欢迎关注公众号“超哥学编程”,即可领取。

扫描二维码推送至手机访问。

版权声明:本文由MDM苹果签名,IPA签名,苹果企业签名,苹果超级签,ios企业签名,iphoneqm.com发布,如需转载请注明出处。

转载请注明出处https://iphoneqm.com/iphoneqm/572.html

分享给朋友:

相关文章

Failed to register bundle identifier. The app identifier “xxx” cannot be registered to your developm

Failed to register bundle identifier. The app identifier “xxx” cannot be registered to your developm

  1、在你的 Mac 开发机器生成一对公私钥,这里称为公钥L,私钥L。L:Local  2、苹果自己有固定的一对公私钥,跟上面 AppStore 例子一样,私钥在苹果后台,公钥在每个 iOS 设备上...

仙桃企业ios苹果超级签名哪家专业靠谱

仙桃企业ios苹果超级签名哪家专业靠谱

   仙桃企业ios苹果超级签名哪家专业靠谱甏笫悠灯教ㄕ理 可以看出,无论是网络剧集还是网络综艺的数量还是播放量来说,网络节目的发展都呈现出良好的态势。超过2/3的IT企业将加IT开支,但加幅度仅为2...

ipa苹果企业签名是什么?

ipa苹果企业签名是什么?

  IPA苹果企业签名(IPA Apple Enterprise Signing)是一种苹果公司提供的开发者证书,可以让开发者将自己开发的应用程序分发给企业内部员工或团队。与一般的App Store上...

IOS 打包、安装、重签名 f3arra1n高级版免费版

IOS 打包、安装、重签名 f3arra1n高级版免费版

  苹果应用IPA一键签名工具是一款电脑ipa批量签名工具,该工具能为苹果应用ipa格式进行免签名处理,还支持修改app名称、日期等功能。软件介绍  苹果应用IPA一键签名工具安装版是一款专业性很强的...

苹果签名是什么?有几种?优势是什么?什么场合需要应用到?

苹果签名是什么?有几种?优势是什么?什么场合需要应用到?

  随着iOS设备在全球的普及,许多用户和开发者都十分关注苹果签名(Apple Signing)这个概念。在这篇文章中,我们将详细介绍苹果签名是什么,如何更方便地获取苹果签名,以及如何使用苹果签名。...

超级签研究流程之获取苹果描述文件

超级签研究流程之获取苹果描述文件

  java8   源码   ios_super_sign   超级签名   免签封装   安卓打包   企业签名   自助分发多合一系统   主要功能...

现在,非常期待与您的又一次邂逅

我们努力让每一次邂逅总能超越期待

  • 高效满意
    高效满意

    专业的技术团队

  • 性能稳定
    性能稳定

    响应速度快,放心有保障

  • 用户体验
    用户体验

    响应式布局,兼容各种设备

  • 持续更新
    持续更新

    不断升级维护,更好服务用户