Ich versuche derzeit, einen Aufruf der Royal Mail API mit NodeJs und SOAP zu implementieren; Ich habe Schwierigkeiten, nach einem Beispiel Python-SkriptDifferent Sha1 Ergebnis zwischen Node & Python
Der Python-Skript, um die Sicherheit Header Implementierung neu zu erstellen, wie
folgt#!/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
Welche Ausgänge:
NONCE 7715776714
BASE64PASSWORD qUqP5cyxm6YcTAhz05Hph5gvu9M=
PASSWORDDIGEST coDzcnSZObFfrM0FY33GcfxjOj4=
ENCODEDNONCE NzcxNTc3NjcxNA==
CREATIONDATE 2016-03-29T14:03:46Z
Ich habe neu erstellt diese mit NodeJs, aber ich scheine eine andere Ausgabe zu bekommen - die Eingabe des korrekten Passworts in der Python-Version und die Verwendung der resultierenden Daten erlauben es mir einen gültigen Aufruf an die API zu machen, die Ausgabe von NodeJs gibt mir einen Autorisierungsfehler
Knoten Js-Code
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);
Welche
gibtNONCE 7715776714
BASE64PASSWORD qUqP5cyxm6YcTAhz05Hph5gvu9M=
PASSWORDDIGEST FRMDpkDOi1j9KB/sDHg1b7BYQgA=
ENCODEDNONCE NzcxNTc3NjcxNA==
CREATIONDATE 2016-03-29T14:03:46Z
Es scheint, dass die Sha für die HASH identisch ist, aber der zweite Sha (verdauen) verursacht einen abweichenden Ergebnis in der NodeJS Version. Irgendwelche Hinweise darauf, wo ich falsch liege?
Als Referenz Ich verwende sha Bibliothek in Python und Krypto in NodeJS
'sha'-Modul ist veraltet, es könnte sinnvoll sein,' hoshlib' statt –