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

如何在.Net Core实现AES/CBC/PKCS5Padding加密 求对接华为云SASS示例代码

.NET Core AES/CBC/PKCS5Padding 加密实现(适配华为云SaaS对接)
  • .NET 框架内置 PaddingMode.PKCS7 与要求的 PKCS5Padding 填充规则完全兼容,可直接使用,无需自定义填充逻辑
  • 密钥长度需与华为云分配的一致:128位对应16字节、192位对应24字节、256位对应32字节
  • IV向量固定为16字节,需严格遵循华为云对接规则生成,若要求随机IV需将加密使用的IV随密文一同传递给华为云

完整工具类实现

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

public static class AesCbcPkcs5Util
{
    /// <summary>
    /// AES/CBC/PKCS5Padding 加密
    /// </summary>
    /// <param name="plainText">待加密明文</param>
    /// <param name="key">加密密钥</param>
    /// <param name="iv">加密向量</param>
    /// <returns>Base64格式密文</returns>
    public static string Encrypt(string plainText, byte[] key, byte[] iv)
    {
        using var aesAlg = Aes.Create();
        aesAlg.Mode = CipherMode.CBC;
        aesAlg.Padding = PaddingMode.PKCS7; // 对应要求的PKCS5Padding
        aesAlg.Key = key;
        aesAlg.IV = iv;

        var encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
        using var msEncrypt = new MemoryStream();
        using var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write);
        using (var swEncrypt = new StreamWriter(csEncrypt, Encoding.UTF8))
        {
            swEncrypt.Write(plainText);
        }
        return Convert.ToBase64String(msEncrypt.ToArray());
    }

    /// <summary>
    /// AES/CBC/PKCS5Padding 解密
    /// </summary>
    /// <param name="cipherText">Base64格式密文</param>
    /// <param name="key">解密密钥</param>
    /// <param name="iv">解密向量</param>
    /// <returns>解密后明文</returns>
    public static string Decrypt(string cipherText, byte[] key, byte[] iv)
    {
        using var aesAlg = Aes.Create();
        aesAlg.Mode = CipherMode.CBC;
        aesAlg.Padding = PaddingMode.PKCS7;
        aesAlg.Key = key;
        aesAlg.IV = iv;

        var decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
        using var msDecrypt = new MemoryStream(Convert.FromBase64String(cipherText));
        using var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read);
        using var srDecrypt = new StreamReader(csDecrypt, Encoding.UTF8);
        return srDecrypt.ReadToEnd();
    }

    /// <summary>
    /// 密钥/IV为UTF-8字符串时调用此方法转字节数组
    /// </summary>
    public static byte[] GetUtf8Bytes(string input) => Encoding.UTF8.GetBytes(input);

    /// <summary>
    /// 密钥/IV为十六进制字符串时调用此方法转字节数组
    /// </summary>
    public static byte[] HexStringToBytes(string hex)
    {
        var bytes = new byte[hex.Length / 2];
        for (var i = 0; i < bytes.Length; i++)
        {
            bytes[i] = Convert.ToByte(hex.Substring(i * 2, 2), 16);
        }
        return bytes;
    }
}

调用示例

// 示例参数,实际使用时替换为华为云分配的密钥、IV
var key = AesCbcPkcs5Util.GetUtf8Bytes("你的16/24/32位长度密钥");
var iv = AesCbcPkcs5Util.GetUtf8Bytes("你的16位长度IV向量");

// 加密
var plainText = "待加密的接口请求内容";
var cipherText = AesCbcPkcs5Util.Encrypt(plainText, key, iv);
Console.WriteLine($"加密后密文:{cipherText}");

// 解密
var decryptedText = AesCbcPkcs5Util.Decrypt(cipherText, key, iv);
Console.WriteLine($"解密后明文:{decryptedText}");

对接华为云SaaS校验说明:

  1. 明文编码固定使用UTF-8,避免中文内容编码不一致导致加密结果不匹配
  2. 若华为云要求返回十六进制格式密文,将加密方法中Convert.ToBase64String替换为字节数组转十六进制逻辑即可
  3. 随机IV场景下,需确保加密时使用的IV与传递给华为云的IV完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:36:07