簡體   English   中英

Node.js加密輸入/輸出類型

[英]Node.js Crypto input/output types

我試圖找出Node.js加密庫以及如何正確使用它來解決我的問題。

我的目標是:

十六進制字符串中的鍵3132333435363738313233343536373831323334353637383132333435363738

十六進制字符串中的文本46303030303030303030303030303030

十六進制字符串中的加密文本70ab7387a6a94098510bf0a6d972aabe

我通過交流實施AES 256並通過網站http://www.hanewin.net/encrypt/aes/aes-test.htm對此進行測試

這就是我所要做的,它沒有像我期望的那樣工作。 我最好的猜測是密碼函數的輸入和輸出類型不正確。 唯一有效的是utf8如果我使用hex它失敗並出現v8錯誤。 關於我應該轉換或改變以使其發揮作用的任何想法。

var keytext = "3132333435363738313233343536373831323334353637383132333435363738";
var key = new Buffer(keytext, 'hex');
var crypto = require("crypto")
var cipher = crypto.createCipher('aes-256-cbc',key,'hex');
var decipher = crypto.createDecipher('aes-256-cbc',key,'hex');

var text = "46303030303030303030303030303030";
var buff = new Buffer(text, 'hex');
console.log(buff)
var crypted = cipher.update(buff,'hex','hex')

在這個例子中加密的輸出是8cfdcda0a4ea07795945541e4d8c7e35,這不是我所期望的。

當您從中導出測試向量的網站使用ecb模式時,您的代碼使用的是aes-256-cbc 此外,您正在調用createCipher ,但使用ECB時,您應該使用createCipheriv帶IV的createCipheriv (請參閱nodeJS:無法獲取加密模塊以獲得正確的AES密碼結果 ),

以下是一些演示此內容的代碼:

var crypto = require("crypto");

var testVector = { plaintext : "46303030303030303030303030303030",
    iv : "",
    key : "3132333435363738313233343536373831323334353637383132333435363738",
    ciphertext : "70ab7387a6a94098510bf0a6d972aabe"};

var key = new Buffer(testVector.key, "hex");
var text = new Buffer(testVector.plaintext, "hex");
var cipher = crypto.createCipheriv("aes-256-ecb", key, testVector.iv);
var crypted = cipher.update(text,'hex','hex');
crypted += cipher.final("hex");
console.log("> " + crypted);
console.log("? " + testVector.ciphertext);

運行該代碼的輸出並不完全符合我的預期,但加密輸出的第一個塊符合您的預期。 可能需要調整的另一個參數:

$ node test-aes-ecb.js 
> 70ab7387a6a94098510bf0a6d972aabeeebbdaed7324ec4bc70d1c0343337233
? 70ab7387a6a94098510bf0a6d972aabe

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM