gpt4 book ai didi

Python PyCrypto RSA 盲与非盲

转载 作者:行者123 更新时间:2023-11-28 16:43:56 24 4
gpt4 key购买 nike

我正在尝试对哈希执行盲化和非盲化。

以下: 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

(我之前已经加载了公钥和私钥,一切正常)

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

M<ssage MD5:?.Z?3??f2??
Blinded: ?YL⽥p??j+Z<I?vxV??{5??
??>[??? ??r?"l
??d?ڸYC????k?U?Q?????C?0?D??*T8?}?P?9~$??'?p??ZR:2? sh͓l??kXvU??d]???$?c聻?b??@?
Blinded Signed: (122872721681409041185513323026772702402844983846953530757782619983060590754290923453963299094289086410649560247540686534912830758097386690290305557644701999751846538319065094741731992734124277081554060855405114566548615303949954231396930615801829673187895538075706631646002356108979884582511973944741160960028L,)
Traceback (most recent call last):
File "NewClient.py", line 103, in <module>
unblind = loadedPrivate.unblind(blindSigned,123)
File "build/bdist.macosx-10.8-intel/egg/Crypto/PublicKey/pubkey.py", line 165, in unblind
File "build/bdist.macosx-10.8-intel/egg/Crypto/PublicKey/RSA.py", line 247, in _unblind
object = RSAobj
File "build/bdist.macosx-10.8-intel/egg/Crypto/PublicKey/_slowmath.py", line 47, in _unblind
OverflowError: cannot fit 'long' into an index-sized integer

尽管 unblind 函数的文档如下:

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

它似乎不接受它。

谁能指出我正确的方向?我已经在这里工作了几个小时。

最佳答案

在我尝试重现您的问题时,有两件事很突出:

  • 在我的 Crypto (2.4.1) 版本中,_RSAobj.blind()_RSAobj.unblind() 调用似乎强制类型(即您需要提供longstringint 不起作用)。 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 必须是二元组,其中第 0 个元素是实际的 RSA 签名)。所以如果你有

verify = loadedPublic.verify(messageHashed, (unblind,))

如宣传的那样工作(即verify 最终应该是True)。

关于Python PyCrypto RSA 盲与非盲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15869317/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com