2016-06-05 14 views
0

Ich versuche, die Funktion getRandomValues ​​() für eine Verschlüsselungs-REST-API zu verwenden, die ich für die Praxis mache. Ich benutze Node für den Server. Aus diesem Grund weiß ich, dass ich kein Fensterobjekt habe, das auch das Kryptoobjekt enthält, das normalerweise die Funktion "getRandomValues ​​()" enthält.getRandomValues ​​() im Knoten: "expected Uint8Array"

Immer, wenn ich es testen, bekomme ich diesen Fehler: TypeError: expected Uint8Array

Dieser Fehler tritt in der dritten Zeile in dieser Funktion:

getrand: function (places) { 
    var array = new Uint32Array(20); 
    getRandomValues(array); 

    var ret = array[0]; 
    for (var i = 1; i < array.size; i++) { 
    ret *= array[i]; 
    } 

    ret = this.shiftnum(ret, 10); 
    return ret; 
}, 

Auch oben oben ich das NPM-Paket mit var getRandomValues = require('get-random-values); importiert haben

Ich habe die Dokumentation für das Paket angeschaut, sowie einige stackoverflow Antworten gesehen, wo jemand ein Beispiel für die Verwendung des Pakets gibt. Das Code-Snippet Beispiel direkt aus den package page ist hier:

var getRandomValues = require('get-random-values'); 

var array = new Uint32Array(10); 
getRandomValues(array); 
// => [ 
// => 183, 
// => 76, 
// => 18, 
// => 177, 
// => 73, 
// => 9, 
// => 50, 
// => 248, 
// => 216, 
// => 104 
// => ] 

Dies ist auch das gleiche Format, das ich in den Beispielen gesehen habe. Ich habe auch versucht, eine sehr einfache Testfunktion, um das Thema zu debuggen wie folgt:

test: function() { 
    var array = new Uint32Array(10); 
    getRandomValues(array); 
    console.log(array[0]); 
    return; 
} 

Genau das gleiche Problem in der dritten Zeile passiert. Darüber hinaus habe ich versucht, die var array = new Uint32Array(10); Zeile zu var array = new Uint8Array(10); nur um den Fehler zu stören, aber der Fehler bleibt genau das gleiche.

Grundsätzlich versuche ich herauszufinden, warum das nicht funktioniert. Ich habe ein paar Tage damit zu tun gehabt und kann nicht herausfinden, was ich falsch mache.

Vielen Dank im Voraus.

Antwort

0

Das Paket soll auf einem Browser oder auf dem Knoten durch require('crypto').randomBytes, arbeiten, da Sie es nur auf dem Knoten arbeiten möchten Sie mit der Funktion randomBytes auf Ihrem eigenen

var crypto = require('crypto') 
var array = crypto.randomBytes(10).toJSON().data 
console.log(array) 
// [ 233, 217, 45, 204, 150, 171, 160, 70, 18, 138 ] 

Hinweis funktionieren könnte, dass eine Rückkehr randomBytes

Puffer
2

ich habe den Fehler meiner eigenen Wege gefunden:

getRandomValues(buf) Fills integer-based TypedArray buf with cryptographically random numbers. Checks for and uses the first of the following:

window.crypto.getRandomValues

window.msCrypto.getRandomValues

Node.js crypto

If none of the above are available, then an Error is thrown.

Throws QuotaExceededError if buf.length > 65536 (even if Node.js crypto, which doesn't have that limit, is being used).

buf must be a Uint8Array if Node.js crypto is used, otherwise a TypeError will be thrown.

Anscheinend war ich Knoten mit .js crypto, deshalb brauchte ich ein Uint8Array. Ich weiß nicht, was vorher passiert ist, aber nachdem ich diesen Code geändert habe, funktionierte es.

Verwandte Themen