我在以下問題上糾結了好幾天,之前也發過同樣的問題,但沒有得到任何積極的反饋。
我使用mysql在建立aes_encrypt方法來加密新的和現有的資料。
我使用下面的鏈接來創建256位的密鑰。
https://www.allkeysgenerator.com/Random/Security-Encryption-Key-Generator.aspx
仍然無法修復,你能提供示例專案或任何型別的支持代碼片段嗎?
uj5u.com熱心網友回復:
這里有多個問題:
確保你的密鑰具有正確的長度。AES被指定為特定的密鑰長度(即128、196和256位)。如果你使用任何其他的密鑰長度,那么你的密鑰將被填充(零擴展)或被密碼庫截斷。這是一個非標準的程序,不同的實作會有不同的做法。為了避免這種情況,請使用正確長度的密鑰,并將其存盤為十六進制,而不是ascii(以避免字符集問題)
。關于密碼到密鑰推理的潛在問題。一些AES實作使用的方法是從密碼/口令推斷出密鑰。由于你在MySQL中使用的是原始密鑰,所以你不希望推斷出任何東西,但也希望在NodeJS中使用原始密鑰。這意味著,如果你使用本地加密模塊,你想使用
createDecipheriv而不是createDecipher。
注意。你所使用的AES模式(ECB)本質上是不安全的,因為相等的輸入會導致相等的輸出。使用其他的AES模式,如CBC或GCM,有辦法解決這個問題。你已經被警告過了。
示例:
MySQL SELECT AES_ENCRYPT('text',UNHEX('F3229A0B371ED2D9441B830D21A390C3')) as test;回傳緩沖區 [145,108,16,83,247,49,165,147,71,115,72,63,152,29,218,246];
在Node中解碼可以這樣:
var crypto = require('crypto'/span>) 。
var algorithm = 'aes-128-ecb';
var decipher = crypto.createDecipheriv(algorithm, Buffer. from("F3229A0B371ED2D9441B830D21A390C3", "hex"), " ")。
var encrypted = Buffer. from([145,108,16, 83,247,49, 165, 147,71,115, 72, 63, 152,29,218,246] )。) //注意,這是存盤在你的資料庫里面的,所以對應于user[0]。 column_one
var decrypted = decipher.update(encrypted, 'binary', 'utf8')。
decrypted = decipher.final('utf8')。
console.log(decrypted)。
這將再次列印出文本。
注意,F3229A0B371ED2D9441B830D21A390C3是這個例子中的密鑰,顯然你必須創建自己的密鑰。只要確保你的密鑰具有與該例子相同的長度,并且是一個有效的十六進制字串。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/334006.html
標籤:
