2016-03-29 17 views
0

arasındaki Sha1 Sonucu Farkı Şu anda Royal Mail API'sıNodeJs ve SOAP kullanarak bir çağrı yapmaya çalışıyorum; Ben bir örnek piton senaryo şöyle piton scriptNode & Python

aşağıdaki güvenlik başlıkları uygulanmasını yeniden zorluk yaşıyorum çıkışı

#!/usr/local/bin/python2.7 
import os 
import sha 
import binascii 
import base64 

password = 'test' 
CREATIONDATE = '2016-03-29T14:03:46Z' 
nonce = '7715776714' 
HASH = sha.new(password).digest() 
BASE64PASSWORD = base64.b64encode(HASH) 

digest = sha.new(nonce + CREATIONDATE + HASH).digest() 


PASSWORDDIGEST = base64.b64encode(digest) 
ENCODEDNONCE = base64.b64encode(nonce) 

print 'NONCE = ', nonce 
print 'BASE64PASSWORD', BASE64PASSWORD 
print 'PASSWORDDIGEST ', PASSWORDDIGEST 
print 'ENCODEDNONCE ', ENCODEDNONCE 
print 'CREATIONDATE ', CREATIONDATE 

:

NONCE 7715776714 
BASE64PASSWORD qUqP5cyxm6YcTAhz05Hph5gvu9M= 
PASSWORDDIGEST coDzcnSZObFfrM0FY33GcfxjOj4= 
ENCODEDNONCE NzcxNTc3NjcxNA== 
CREATIONDATE 2016-03-29T14:03:46Z 

kullanıyorum bu yeniden oluşturduk NodeJs ama ben farklı bir çıkış elde etmek gibi görünüyor - python sürümünde doğru şifre girerek ve elde edilen verileri kullanarak API için geçerli bir çağrı yapmak için izin verir, NodeJs çıkışını kullanarak bana bir yetkilendirme hatası veriyor

0 HASH Sha aynıdır, ancak ikinci Sha (digest) NodeJs sürüm farklı bir sonuç verir

NONCE 7715776714 
BASE64PASSWORD qUqP5cyxm6YcTAhz05Hph5gvu9M= 
PASSWORDDIGEST FRMDpkDOi1j9KB/sDHg1b7BYQgA= 
ENCODEDNONCE NzcxNTc3NjcxNA== 
CREATIONDATE 2016-03-29T14:03:46Z 

verir

Düğüm Js Kod

var createdDate, password = 'test', nonce; 
createdDate = '2016-03-29T14:03:46Z'; 
nonce = '7715776714'; 

var crypto = require("crypto"), 
passHash = crypto.createHash('sha1'), 
digestHash = crypto.createHash('sha1'); 

passHash.update(password); 

var HASH = passHash.digest(); 
console.log('NONCE ' + nonce) 
console.log('BASE64PASSWORD ' + base64_encode_string(HASH)) 

digestHash.update(nonce + createdDate + HASH); 
var digest = digestHash.digest(); 

var PASSWORDDIGEST = base64_encode_string(digest); 
console.log('PASSWORDDIGEST ' + PASSWORDDIGEST); 
var ENCODEDNONCE = base64_encode_string(nonce.toString()); 

console.log('ENCODEDNONCE ' + ENCODEDNONCE); 
console.log('CREATIONDATE ' + createdDate); 

Öyle görünüyor. Nereye gittiğime dair işaretçiler var mı? Ben

+0

'sha' modülü kullanımdan kaldırıldı,' hashlib' kullanmak yerine akıllıca olabilir –

cevap

0

bir problem NodeJs içinde piton ve kripto içinde sha kütüphanesini kullanıyorum Başvuru için

örtük ikili dönüştürürken bozuk çıktı neden yükümlüdür UTF-8 dizeye HASH Tampon dönüştürme konum olmasıdır UTF-8'e. Bunun yerine, HASH yılında ikili veri .update() birden çok kez arayıp koruyabilir:

digestHash.update(nonce + createdDate); 
digestHash.update(HASH); 
var digest = digestHash.digest(); 

alakasız bir kayda göre, sadece buffer.toString('base64') (örn HASH.toString('base64')) yapabileceği olanlar için gibi, Tamponlar için base64_encode_string() gerekmez.

+0

Bunu çözdünüz teşekkür! – ossie