簡體   English   中英

TripleDES:加密(.Net)-解密(CryptoJS)

[英]TripleDES: Encrypt (.Net) - Decrypt (CryptoJS)

我有一個C#應用程序,它使用以下方法對數據庫中的密碼進行加密和解密:

public static string Encrypt(string input, string key)
{
    TripleDESCryptoServiceProvider tripleDES = new TripleDESCryptoServiceProvider();
    tripleDES.Key = UTF8Encoding.UTF8.GetBytes(key);
    tripleDES.Mode = CipherMode.ECB;
    tripleDES.Padding = PaddingMode.PKCS7;
    ICryptoTransform cTransform = tripleDES.CreateEncryptor();

    byte[] inputArray = UTF8Encoding.UTF8.GetBytes(input);

    byte[] resultArray = cTransform.TransformFinalBlock(inputArray, 0, inputArray.Length);
    tripleDES.Clear();

    return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}

public static string Decrypt(string input, string key)
{
    byte[] inputArray = Convert.FromBase64String(input);

    TripleDESCryptoServiceProvider tripleDES = new TripleDESCryptoServiceProvider();
    tripleDES.Key = UTF8Encoding.UTF8.GetBytes(key);
    tripleDES.Mode = CipherMode.ECB;
    tripleDES.Padding = PaddingMode.PKCS7;
    ICryptoTransform cTransform = tripleDES.CreateDecryptor();

    byte[] resultArray = cTransform.TransformFinalBlock(inputArray, 0, inputArray.Length);
    tripleDES.Clear();

    return UTF8Encoding.UTF8.GetString(resultArray);
}

因此,如果我使用密鑰0123456789012345加密密碼testing ,則結果將為+dc6bsOFg00=

現在,我必須從NodeJS應用程序(使用CryptoJS)讀取這些密碼,但是我不確定該怎么做,因為在C#中,加密是面向字節的 (請注意,在代碼中, inputkey都被轉換為byte[] ),而在CryptoJS中,它更面向字符串

我嘗試使用此JavaScript函數沒有成功:

var CryptoJS = require("crypto-js");

function decrypt(input, key) {
    var inputArray = new Buffer(input, 'base64');
    var inputString = inputArray.toString();
    var resultArray = CryptoJS.TripleDES.decrypt(inputString, key, {'mode': CryptoJS.mode.ECB, 'pad': CryptoJS.pad.Pkcs7});
    return resultArray.toString();
}

console.log(decrypt("+dc6bsOFg00=", "0123456789012345"));

更新:我知道加密密碼不是一個好主意,並且Triple DES並不是最好的算法,但是無法修改C#應用程序(至少目前還不能),因此我無法更改密碼的加密方式,我必須按原樣閱讀它們。

(代表OP張貼)

感謝您的建議,但是使用inputArray.toString('binary')無效。

我終於解決了我的問題,就是使用Edge.js :由於我擁有用於​​加密和解密的C#方法的代碼,因此我可以使用Edge.js從Node應用程序中執行這些方法。

暫無
暫無

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

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