所以我有一些代码:

signature = hmac.new(
    key=AWS_SECRET_ACCESS_KEY,
    msg=string_to_sign,
    digestmod=hashlib.sha256).digest()

这在我自己的计算机上完美运行(具有Python 2.6.1)。但是,当我在服务器上运行此代码(Python 2.4.3)时,我会得到以下内容:

 /home/MYUSERNAME/public_html/Foo.com/cgi-bin/foo.py
   66     key=AWS_SECRET_ACCESS_KEY,
   67     msg=string_to_sign,
   68     digestmod=hashlib.sha1).digest()
   69  
   70 # Base64 encode the signature
digestmod = <built-in function openssl_sha256>, hashlib = <module 'hashlib' from '/usr/lib/python2.4/site-...shlib-20081119-py2.4-linux-i686.egg/hashlib.pyc'>, hashlib.sha1 = <built-in function openssl_sha1>, ).digest undefined
 /usr/lib/python2.4/hmac.py in new(key='xR6MsC/+Vc2xkd0YYbER0meR/IkWEU', msg='GET\necs.amazonaws.com\n/onca/xml\nAWSAccessKeyId=A...CommerceService&Timestamp=2010-07-03T18%3A56%3A48', digestmod=<built-in function openssl_sha1>)
  103     You can now feed arbitrary strings into the object using its update()
  104     method, and can ask for the hash value at any time by calling its digest()
  105     method.
  106     """
  107     return HMAC(key, msg, digestmod)
global HMAC = <class hmac.HMAC>, key = 'xR6MsC/+Vc2xkd0YYbER0meR/IkWEU', msg = 'GET\necs.amazonaws.com\n/onca/xml\nAWSAccessKeyId=A...CommerceService&Timestamp=2010-07-03T18%3A56%3A48', digestmod = <built-in function openssl_sha1>
 /usr/lib/python2.4/hmac.py in __init__(self=<hmac.HMAC instance>, key='xR6MsC/+Vc2xkd0YYbER0meR/IkWEU', msg='GET\necs.amazonaws.com\n/onca/xml\nAWSAccessKeyId=A...CommerceService&Timestamp=2010-07-03T18%3A56%3A48', digestmod=<built-in function openssl_sha1>)
   40 
   41         self.digestmod = digestmod
   42         self.outer = digestmod.new()
   43         self.inner = digestmod.new()
   44         self.digest_size = digestmod.digest_size
self = <hmac.HMAC instance>, self.outer undefined, digestmod = <built-in function openssl_sha1>, digestmod.new undefined

AttributeError: 'builtin_function_or_method' object has no attribute 'new'
      args = ("'builtin_function_or_method' object has no attribute 'new'",) 

我知道明显的响应是只是在服务器上更新Python,但是我的主机必须这样做,我不知道它将花费多长时间。我很好奇这是否是2.4.3上的常见/已知问题,或者是否正在发生其他事情。

谢谢

有帮助吗?

解决方案

hashlib 是2.5中的新事物。您需要 回港 适用于Python的较旧版本。

其他提示

这是使Hashlib Backport在Python 2.4上与HMAC一起工作的攻击方法:

class mysha256:
    digest_size = 32
    def new(self, inp=''):
        return hashlib.sha256(inp)

并使用这样的HMAC:

signature = hmac.new(
    key=AWS_SECRET_ACCESS_KEY,
    msg=string_to_sign,
    digestmod=mysha256()).digest()
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top