我繼承了一個資料庫,其中的密碼利用以下函式在VB.NET中進行加密/解密
。Public Shared Function EncryptString(Shared) title class_">EncryptString(ByVal Message As String, ByVal Passphrase As String) As String)
Dim Results As Byte()
Dim UTF8 As System.Text。 UTF8Encoding = New System.Text.UTF8Encoding()
Dim HashProvider As. title class_">As MD5CryptoServiceProvider = New MD5CryptoServiceProvider()
Dim TDESKey As Byte() = HashProvider. ComputeHash(UTF8.GetBytes(Passphrase)
Dim TDESAlgorithm As Triple title class_">TripleDESCryptoServiceProvider = New TripleDESCryptoServiceProvider()
TDESAlgorithm.Key = TDESKey
TDESAlgorithm.Mode = CipherMode.ECB。
TDESAlgorithm.Padding = PaddingMode.PKCS7。
Dim DataToEncrypt As Byte()=UTF8。 GetBytes(Message)
Dim Encryptor As ICryptoTransform = TDESAlgorithm.CreateEncryptor()
Results = Encryptor. TransformFinalBlock(DataToEncrypt, 0, DataToEncrypt. Length)
Return Convert.ToBase64String(Results)
結束 功能
Public Shared Function DecryptString(ByVal Message As String。ByVal Passphrase As String) As String)
Dim Results As Byte()
Dim UTF8 As System.Text。 UTF8Encoding = New System.Text.UTF8Encoding()
Dim HashProvider As. title class_">As MD5CryptoServiceProvider = New MD5CryptoServiceProvider()
Dim TDESKey As Byte() = HashProvider. ComputeHash(UTF8.GetBytes(Passphrase)
Dim TDESAlgorithm As Triple title class_">TripleDESCryptoServiceProvider = New TripleDESCryptoServiceProvider()
TDESAlgorithm.Key = TDESKey
TDESAlgorithm.Mode = CipherMode.ECB。
TDESAlgorithm.Padding = PaddingMode.PKCS7。
Dim DataToDecrypt As Byte() = Convert。 FromBase64String(Message)
Dim Decryptor As ICryptoTransform = TDESAlgorithm.CreateDecryptor()
Results = Decryptor. TransformFinalBlock(DataToDecrypt, 0, DataToDecrypt. Length)
Return UTF8.GetString(Results)
結束 功能
我在對資料進行加密以查詢SQL服務器時遇到了困難。
當使用帶有以下引數的EncryptString時:
訊息 = stack-overflow
口令 = Danielle
我得到:
1c2wL guV34oyVS0vkxwVA==
我需要用node.js來做這個加密和解密
我試過了,但是沒有成功。
我試了一下,但沒有成功:
我試了一下,但沒有成功。
var crypto = require('crypto'/span>)。
encrypt(text, paraphrase) {
const key =text;
const secret =paraphrase;
// 加密
const cipher = crypto.createCipheriv("aes-192-ecb", Buffer. from(key, "base64"), null)。
const encryptedSecret = cipher.update(secret, "utf8"/span>, "base64"/span>) cipher.final("base64") 。
return(encryptedSecret)。
};
我也試過用npm安裝MD5,但也沒有收獲。
如果有任何關于加密和解密的幫助,我們將不勝感激。謝謝大家。
uj5u.com熱心網友回復:
為了使NodeJS代碼與VB代碼兼容,必須使用TripleDES而不是AES。密鑰必須用MD5匯出。由于MD5提供了一個16位元組的密鑰,TripleDES被應用于雙長密鑰變體(2TDEA),它將兩個DES密鑰K1和K2合并為一個TripleDES密鑰K1|K2|K1。一個可能的實作是:
var key16 = crypto. createHash('md5').update(passsphrase).digest()。
var cipher = crypto.createCipheriv("des-ede-ecb", key16, null)。
var ciphertext = cipher.update(data, "utf8"/span>, "base64"/span>) cipher.final("base64") 。
如果des-ede-ecb不被支持,des-ede3-ecb可以作為一個替代。這實作了TripleDES的三長密鑰變體(3TDEA),它將三個DES密鑰K1、K2和K3組合成一個TripleDES密鑰K1|K2|K3。對于K3 = K1來說,這相當于2TDEA:
var key16 = crypto. createHash('md5').update(passsphrase).digest()。
var key24 = Buffer.concat([key16, key16. slice(0, 8)])。)
var cipher = crypto.createCipheriv("des-ede3-ecb", key24, null)。
注意ECB是不安全的(最好是像GCM這樣有IV的模式),通過加密哈希函式的密鑰推導也是不安全的(最好是像PBKDF2這樣可靠的密鑰推導函式),而且破損的MD5也是如此(最好是SHA256)。TripleDES已被廢棄,而且速度很慢(更好的AES)。
編輯:
解密是完全模擬的,例如,對于2TDEA。var key16 = crypto. createHash('md5').update(passsphrase).digest()。
var decipher = crypto.createDecipheriv("des-ede-ecb", key16, null)。
var decrypted = decipher.update(ciphertext, "base64"/span>, "utf8"/span>) decipher.final("utf8") 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/334233.html
標籤:
