<p>在我试图复制你的问题时,有两件事很突出:</p>
<ul>
<li>在我的Crypto(2.4.1)版本中,<code>_RSAobj.blind()</code>和{<cd2>}调用似乎强制执行类型(即,您需要<em>来提供<code>long</code>或{<cd4>},<code>int</code>不起作用)。一个<code>long</code>常数是通过在数值末尾加上<code>L</code>来表示的(例如<code>9001L</code>)。在</li>
<li><code>_RSAobj.sign()</code>函数返回一个元组。签名在返回值的元素0中结束。在</li>
</ul>
<p>所以你的代码看起来是这样的:</p>
<pre><code>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
</code></pre>
<p>这段代码运行,但可能并没有完成您真正想要它做的事情;尤其是<code>verify</code>最终总是<code>False</code>。在</p>
<p>揭盲后得到的是使用p的<code>messageHashed</code>的有效RSA签名,<code>_RSAobj.verify(self, M, signature)</code>是正确的函数签名(其中<code>signature</code>必须是一个2元组,其第0个元素是实际的RSA签名)。所以如果你有</p>
^{pr2}$
<p>这个<em>会像广告中说的那样工作(即<code>verify</code>最终应该是<code>True</code>)。在</p>