You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Angular7中实现与给定C#代码一致的MD5+TripleDES加密?

Angular 7 实现与C#一致的3DES加密逻辑

搞定这个问题不难,核心是对齐C#和CryptoJS在3DES加密上的几个细节差异!你的C#代码用的是3DES(Triple DES)ECB模式+PKCS7填充,而且密钥处理有个容易忽略的点——MD5哈希原密钥后,C#会自动把16字节的哈希值扩展成24字节的3DES密钥(采用2-key 3DES模式)。下面是完全匹配逻辑的Angular 7实现:

步骤1:安装CryptoJS

首先在项目里安装CryptoJS依赖:

npm install crypto-js --save

步骤2:实现加密函数

在你的Angular组件或服务中,导入CryptoJS并编写加密函数,完全对齐C#的每一步逻辑:

import * as CryptoJS from 'crypto-js';

// 与C# Encrypt函数完全匹配的Angular实现
encrypt(plainText: string, secretKey: string): string {
  try {
    // 1. 将明文转为UTF8编码(对应C#的UTF8Encoding.UTF8.GetBytes(PlainText))
    const plainTextUtf8 = CryptoJS.enc.Utf8.parse(plainText);

    // 2. 对密钥进行MD5哈希(对应C#的MD5CryptoServiceProvider.ComputeHash)
    const md5KeyHash = CryptoJS.MD5(secretKey);
    // 关键:C#的TripleDES会自动将16字节MD5哈希扩展为24字节(K1+K2+K1模式)
    // 手动实现:取MD5哈希的前8字节(2个Word)追加到哈希末尾,得到24字节密钥
    const tripleDesKey = md5KeyHash.concat(md5KeyHash.clone().words.slice(0, 2));

    // 3. 配置3DES参数:ECB模式、PKCS7填充(对应C#的CipherMode.ECB和PaddingMode.PKCS7)
    const encryptedResult = CryptoJS.TripleDES.encrypt(plainTextUtf8, tripleDesKey, {
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7
    });

    // 4. 将加密结果转为Base64字符串(对应C#的Convert.ToBase64String)
    return encryptedResult.toString();
  } catch (error) {
    console.error('加密失败:', error);
    return "ERROR";
  }
}

关键细节说明

为什么之前用CryptoJS得不到一致结果?因为这几个容易踩坑的点:

  • 密钥扩展:C#的TripleDESCryptoServiceProvider在传入16字节密钥时,默认使用2-key 3DES模式(K3 = K1),所以我们必须手动把MD5得到的16字节哈希,追加前8字节变成24字节,才能和C#的密钥处理逻辑一致。
  • 加密模式:CryptoJS的TripleDES默认使用CBC模式,而你的C#代码用的是ECB模式,必须显式指定。
  • 编码对齐:全程使用UTF8编码,和C#的UTF8Encoding.UTF8保持完全一致。

测试验证

你可以用相同的明文和密钥测试,比如:

  • 明文:"HelloWorld123"
  • 密钥:"MySecretKey123"
    Angular加密后的结果应该和C#的Encrypt函数输出完全一致。

内容的提问来源于stack exchange,提问作者Bilal Maher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:49:18