Python PyCrypto RSA盲解盲

2024-09-30 20:36:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着在哈希表上执行盲法和解盲法。在

以下内容: https://gdata-python-client.googlecode.com/hg/pydocs/gdata.Crypto.PublicKey.RSA.html#RSAobj_c-unblind

我有:

messageHashed = md5.new('MyMessage').digest()
print 'Message MD5:%s' % messageHashed
blindSigned = loadedPublic.blind(messageHashed,123)
print 'Blinded: %s' % blindSigned
blindSigned = loadedPrivate.sign(blindSigned,loadedPrivate.n)
print 'Blinded Signed: %s' % str(blindSigned)

unblind = loadedPrivate.unblind(blindSigned,123)
print '-------------'
print 'Unblinded: %s' % unblind
verify = loadedPrivate.verify(unblind,(loadedPrivate.n,loadedPrivate.d))
print 'Verify: %s' % verify

(我以前已经加载了公钥和私钥,而且工作正常)

现在,我的问题是,当它运行时,我得到以下输出:

^{pr2}$

尽管解盲功能记录如下:

unblind(self, M, B)
unblind(M : string|long, B : string|long) : string|long
Unblind message M using blinding factor B.

它似乎不接受它。在

谁能给我指出正确的方向吗?我已经做了几个小时了。在


Tags: httpscomclientstringlongprintverifygooglecode
2条回答

在我试图复制你的问题时,有两件事很突出:

  • 在我的Crypto(2.4.1)版本中,_RSAobj.blind()和{}调用似乎强制执行类型(即,您需要来提供long或{},int不起作用)。一个long常数是通过在数值末尾加上L来表示的(例如9001L)。在
  • _RSAobj.sign()函数返回一个元组。签名在返回值的元素0中结束。在

所以你的代码看起来是这样的:

messageHashed = md5.new('MyMessage').digest()
print 'Message MD5:%s' % messageHashed
blindSigned = loadedPublic.blind(messageHashed,123L)
print 'Blinded: %s' % blindSigned
blindSigned = loadedPrivate.sign(blindSigned,loadedPrivate.n)[0]
print 'Blinded Signed: %s' % str(blindSigned)

unblind = loadedPublic.unblind(blindSigned,123L)
print '      -'
print 'Unblinded: %s' % unblind
verify = loadedPublic.verify(unblind,(loadedPrivate.n,loadedPrivate.d))
print 'Verify: %s' % verify

这段代码运行,但可能并没有完成您真正想要它做的事情;尤其是verify最终总是False。在

揭盲后得到的是使用p的messageHashed的有效RSA签名,_RSAobj.verify(self, M, signature)是正确的函数签名(其中signature必须是一个2元组,其第0个元素是实际的RSA签名)。所以如果你有

^{pr2}$

这个会像广告中说的那样工作(即verify最终应该是True)。在

从我的脑子里想一想,你应该提取签名中包含的摘要,以便将未隐藏的数据取出。在

稍后当我到一台机器测试代码时,我会在这方面做得更好。在

相关问题 更多 >