说明

当查询返回一些敏感信息时,这些信息会被加密处理,这时需要进行解密处理!

### 如何判断字段需要解密 一般被加密的字段返回值是Base64格式,字段在描述中备注需要解密

### 解密方式

数据采用AES加解密,关键信息请查看表格:

信息 说明
密钥(UTF-8) infoexchange4api
向量(UTF-8) activevector4api
编码 Base64
位数 128位
模式 CBC
填充 Pkcs7/Pkcs5

示例代码

C#示例

    /// <summary>
    /// 使用 AES 算法解密值。
    /// </summary>
    /// <param name="value">要解密的加密值。</param>
    /// <param name="key">加密密钥</param>
    /// <param name="iv">初始化向量</param>
    /// <returns>解密后的值作为字符串。</returns>
    public static string AesDecrypt(string value, string key, string iv)
    {
        // 检查输入值是否为空或 null,如果是,则原样返回
        if (string.IsNullOrEmpty(value)) return value;
        
        // 验证密钥
        if (key == null) throw new Exception("未设置加密密钥。");
        if (key.Length < 16) throw new Exception("指定的密钥长度不能少于16位。");
        if (key.Length > 32) throw new Exception("指定的密钥长度不能多于32位。");
        if (key.Length != 16 && key.Length != 24 && key.Length != 32) 
            throw new Exception("指定的密钥长度不明确。");

        // 如果提供了 IV,则验证 IV 的长度
        if (!string.IsNullOrEmpty(iv) && iv.Length < 16) 
            throw new Exception("指定的初始化向量长度不能少于16位。");

        // 将密钥转换为字节数组
        var keyBytes = Encoding.UTF8.GetBytes(key);

        // 将经 Base64 编码的加密值转换为字节数组
        var encryptedBytes = Convert.FromBase64String(value);

        // 创建 RijndaelManaged 类的新实例
        using (var aes = new RijndaelManaged())
        {
            // 设置 IV,使用提供的值或密钥的前 16 个字符
            aes.IV = !string.IsNullOrEmpty(iv) ? Encoding.UTF8.GetBytes(iv) : keyBytes.Take(16).ToArray();

            // 设置加密密钥
            aes.Key = keyBytes;

            // 设置 Cipher Mode 为 CBC(Cipher Block Chaining)
            aes.Mode = CipherMode.CBC;

            // 设置 Padding Mode 为 PKCS7
            aes.Padding = PaddingMode.PKCS7;

            // 创建解密器
            var cryptoTransform = aes.CreateDecryptor();

            // 将加密字节数组转换回原始形式
            var resultArray = cryptoTransform.TransformFinalBlock(encryptedBytes, 0, encryptedBytes.Length);

            // 将结果字节数组转换为 UTF-8 编码的字符串
            return Encoding.UTF8.GetString(resultArray);
        }
    }
作者:mry  创建时间:2024-10-24 09:01
 更新时间:2024-10-24 11:29