苹果签名

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

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

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

  本文属于《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://www.iphoneqm.com/iphoneqm/572.html

分享给朋友:

相关文章

一文详解:苹果TF签名和超级签名的差异

一文详解:苹果TF签名和超级签名的差异

  苹果TF签名   TF签名又称 苹果TestFlight签名,是目前最稳定的签名方式。苹果TF签名是一种苹果官方认可的分发模式。目前苹果APP内测商城是要使用 TestFlight 测试 B...

英伦省钱指南 DealMoon UK - 黑五折扣信息大合‪集‬4+

英伦省钱指南 DealMoon UK - 黑五折扣信息大合‪集‬4+

  英国商家最新最热的折扣信息,24/7滚动更新。英国黑五、网络星期一购物狂欢节优惠资讯:女装、男装、鞋包、美妆、护肤、家居、母婴、零食、数码,超值优惠一网打尽!英伦省钱指南是找全球好物,分享优质生活...

选择多的ios重签名分发

选择多的ios重签名分发

  iOS重签名分发是指将已经存在的iOS应用程序重新签名,以便在不同的设备上分发和安装。这种分发方式可以通过多个途径实现,其中包括Apple官方的企业证书、开发者证书以及第三方重签名工具等等。在选择...

[iOS逆向]2、HASH&AED、DES&双向验证

[iOS逆向]2、HASH&AED、DES&双向验证

  把任意长度的输入通过散列算法变成固定长度的输出,该输出就是散列值   1.1、相关命令   1、32个字符的MD5散列字符串   2、40个字符的SHA1散列字符串   3...

苹果TF签名成功开发者们的首选?原因是什么?

苹果TF签名成功开发者们的首选?原因是什么?

  今年以来,要说最受欢迎的苹果签名,非苹果TF签名莫属。作为唯一苹果官方内测商店,testflight一度被称为“地下App Store”,应用在做了苹果TF签名之后就可以直接通过邀请下载链接或者邮...

邀 请 | 世界上真的有圣诞老人吗,没想到答案竟然是这样...

邀 请 | 世界上真的有圣诞老人吗,没想到答案竟然是这样...

  今日推文阅读时间约3分钟,   如果你不看前面的故事,   只需要2分钟。   Merry   CHRISTMAS   这世界上真的有圣诞老人吗?   1897...

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

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

  • 高效满意
    高效满意

    专业的技术团队

  • 性能稳定
    性能稳定

    响应速度快,放心有保障

  • 用户体验
    用户体验

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

  • 持续更新
    持续更新

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