c# - C# 和 Node JS 中的 TripleDES 加密结果不同

标签 c# node.js cryptojs tripledes

这可能是重复的,但我无法修复它。 下面是我的 TripleDES 的 C# 代码:

using System;
using System.Security.Cryptography;
using System.IO;
using System.Text;

class MainClass {
   public static void Main (string[] args) {

   String encrypt="5241110000602040";
   SymmetricAlgorithm sa= SymmetricAlgorithm.Create("TripleDES");
   sa.Key= Convert.FromBase64String("FRSF1P3b6fHiW/DXrK8ZJks5KAiyNpP0");
   sa.IV=Convert.FromBase64String("YFKA0QlomKY=");


   byte[] iba=Encoding.ASCII.GetBytes(encrypt);
   MemoryStream mS=new MemoryStream();

   ICryptoTransform trans=sa.CreateEncryptor();
   byte[] buf= new byte[2049];

   CryptoStream cs=new CryptoStream(mS,trans,CryptoStreamMode.Write);

   cs.Write(iba,0,iba.Length);
   cs.FlushFinalBlock();

   Console.WriteLine(Convert.ToBase64String(mS.ToArray()));


 }
}

加密值为

Nj7GeyrbJB93HZLplFZwq5HRjxnvZSvU

我想用nodejs的crypto-js库实现同样的事情。这是我尝试过的nodejs代码:

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

var text = "5241110000602040";
var key = "FRSF1P3b6fHiW/DXrK8ZJks5KAiyNpP0";

var options = {
//  mode: CryptoJS.mode.ECB, 
//  padding: CryptoJS.pad.Pkcs7,
iv: CryptoJS.enc.Hex.parse("YFKA0QlomKY=")
};

var textWordArray = CryptoJS.enc.Utf8.parse(text);
var keyHex = CryptoJS.enc.Hex.parse(key);

var encrypted = CryptoJS.TripleDES.encrypt(textWordArray, keyHex, options);

var base64String = encrypted.toString();

console.log('encrypted val: ' + base64String);

预期输出

Nj7GeyrbJB93HZLplFZwq5HRjxnvZSvU

实际输出

NXSBe9YEiGs5p6VHkzezfdcb5o08bALB

nodejs 中的加密值与 C# 不同。我做错了什么?

最佳答案

您对 key 和 iv 的解码方式不同。

在 c# 中,您使用 base64:

sa.Key= Convert.FromBase64String("FRSF1P3b6fHiW/DXrK8ZJks5KAiyNpP0");
sa.IV=Convert.FromBase64String("YFKA0QlomKY=");

在 Node.js 十六进制中:

iv: CryptoJS.enc.Hex.parse("YFKA0QlomKY=")
var key = "FRSF1P3b6fHiW/DXrK8ZJks5KAiyNpP0";
var keyHex = CryptoJS.enc.Hex.parse(key);

在这两种情况下都尝试使用 base64。

关于c# - C# 和 Node JS 中的 TripleDES 加密结果不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54365944/

相关文章:

c# - 与硬件接口(interface)的 MCV/MVP 模式和应用程序(DAQ/PLC/等)

c# - 是否值得为单个类抽象出对象创建?

javascript - 未捕获的类型错误 : Cannot read property '0' of undefined CryptoJS

node.js - 如何在 NodeJS 中导入 "crypto"系统库,因为它突然未定义?

c# - 如何防止基于文件名设置嵌入式资源文件文化

c# - 绑定(bind)到 AvalonDock 2 中的 LayoutAnchorableItem 可见性

node.js - 如何在 session 中存储 JWT token ?

javascript - 如何读取node.js中的终端输入?

javascript - 分隔 Node 中的 require 实例