恶心的openssl。。。

恶心的openssl。。。



就像我上篇说的那样,果然只要改动一处地方就大功告成了,但是那一处地方还
真让我找得蛋疼。且不说我到底是怎么个给搞出来的,那个过程可谓艰辛,真要
说可能会使本文不自觉成为一篇长篇大论,所以这里我就说说一个关键的地方,
也是openssl中极其恶心的地方。
以下内容可能涉及技术性内容,路过路过吧。。。

先来看这个函数  
RSA_sign(NID_sha1, m, m_len, sigret, siglen, rsa);
不知道各位看到这里的第一反应是什么?肯定会和我一样天真的认为 那个是rsa签名函数, 对数据m先做
sha1摘要,再对摘要数据用rsa进行签名
如果是这样,那么你也中招了 。当然如果你能把函数的文档说
明一字不漏的仔细看过遍,或许可以明白这个函数真正的用意。但是首先英文非我母语,我理解起来难免
有误,其次信息安全也并非我专业,我只是临时用一下而已,有些专业的地方搞不明白也在所难免,而且
还有一点很重要的是我被java中签名算法所谓的SHA1withRSA给误导,想当然的以为这两者其实的功能是
一致的,外加上函数源码中的i2d_X509_SIG()这个函数产生的误解,导致我走了不少弯路。
恩,前面找了这么多借口,是时候该说说这个函数本身了,这个函数确实是签名,而且并不是单纯的你传
什么我就签什么那种,也不是我前面说的先sha1再rsa,关键在于要理解签名的数据在进行rsa加密之前到
底做了哪些变化。经百度可知, 像sha1withRSA这样的算法,他不仅对明文进行了摘要,还在摘要前添加
固定个长度的摘要算法标识
而做这个标识的其实就是上面所说的RSA_sign所做的,并且由第一个参数
所指定了算法的类型来告诉函数给你添加哪些类型的标识。

说了这么多其实可以一言以蔽之,就是如果你想做sha1withRSA这样的算法,那么
RSA_sign函数中第一个参数为NID_sha1,第二第三个参数为明文的sha1摘要及长度
,而并非明文本身。

这个例子告诉我仔细阅读文档很重要,当然我到现在还是没怎么理解。以及有些
时候确实应该静下心来好好的想一下,而不是盲目的枚举或判断可能出问题的
原因。此次事件虽说时间是浪费了不少,而对签名本身的理解也有了进一步的
认识,不得不说,塞翁失马,焉知非福。

p.s:狗日的baidu怎么把换行给去掉了???编辑得我苦的来,我擦。。。

俺妹这东西内容倒不怎么样,人设确实很让人喜欢,每个都好有爱啊。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值