parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Это обычная проблема для платежных систем...

Sumo 13.07.2012 07:32 / 13.07.2012 07:38

Почему-то некоторые проектировщики очень любят бинарные данные в электронных подписях, которые приходится заворачивать в base64 при передаче в текстовых протоколах. В случае с liqpay лучше было использовать sha1(str, false) и передавать шестнадцатиричную строку, которую достаточно просто получить и обработать на любом языке, но разработчики не подумали об этом. Похожий механизм использует Платеж.ру, только для md5-хеширования. В таких случаях позвать внешний скрипт на языке общего назначения самое милое дело. :)

Для платежа я написал скрипт на питоне. Чтобы получить sha1 надо поменять «hashlib.md5()» на «hashlib.sha1()». Hashlib поддерживает алгоритмы: md5(), sha1(), sha224(), sha256(), sha384(), sha512().
#!/usr/bin/env python
# encoding: utf-8
        
import sys
import hashlib
import base64

def main():
  m = hashlib.md5()
  m.update(sys.argv[1])
  print base64.b64encode(m.digest()),
  sys.exit(0)

def usage():
  print "Calculate md5_base64."
  print "Usage: %s string" % sys.argv[0]
  sys.exit(1)

if __name__ == '__main__':
  if len(sys.argv) > 1:
    main()
  else:
    usage()
Использовать несложно и уж точно проще, чем звать php:
  $h[^file::exec[str_md5_b64.py;;string]]
  md5: $h.text