• C# 3Des加密解密


    最近在对接一个第三方接口,请求参数和响应参数全采用3des加密规则,由于我是用.NET对接的,而第三方是Java开发的,所以两种程序之间采用的算法有一点差异,java的3des加密采用的是"DESede/CBC/PKCS5Padding"规则,所以对应的C#规则是"PaddingMode.PKCS7和CipherMode.CBC",使用ECB编码模式,那么就无须使用加密向量。

    C#代码如下:

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

    namespace TCWireless.Utility

    {

    public class DESHelper
    {
      #region 3des加密

    /// <summary>
    /// 3des ecb模式加密
    /// </summary>
    /// <param name="aStrString">待加密的字符串</param>
    /// <param name="aStrKey">密钥</param>
    /// <param name="iv">加密矢量:只有在CBC解密模式下才适用</param>
    /// <param name="mode">运算模式</param>
    /// <returns>加密后的字符串</returns>
    public static string Encrypt3Des(string aStrString, string aStrKey, CipherMode mode = CipherMode.ECB)
    {
      try
      {
        var des = new TripleDESCryptoServiceProvider
        {
          Key = Encoding.UTF8.GetBytes(aStrKey),
          Mode = mode
        };
        var desEncrypt = des.CreateEncryptor();
        byte[] buffer = Encoding.UTF8.GetBytes(aStrString);
        return Convert.ToBase64String(desEncrypt.TransformFinalBlock(buffer, 0, buffer.Length));
      }
      catch (Exception e)
      {
        return string.Empty;
      }
    }

    #endregion

    #region 3des解密

    /// <summary>
    /// des 解密
    /// </summary>
    /// <param name="aStrString">加密的字符串</param>
    /// <param name="aStrKey">密钥</param>
    /// <param name="iv">解密矢量:只有在CBC解密模式下才适用</param>
    /// <param name="mode">运算模式</param>
    /// <returns>解密的字符串</returns>
    public static string Decrypt3Des(string aStrString, string aStrKey, CipherMode mode = CipherMode.ECB)
    {
      try
      {
        var des = new TripleDESCryptoServiceProvider
        {
          Key = Encoding.UTF8.GetBytes(aStrKey),
          Mode = mode,
          Padding = PaddingMode.PKCS7
        };
        var desDecrypt = des.CreateDecryptor();
        var result = "";
        byte[] buffer = Convert.FromBase64String(aStrString);
        result = Encoding.UTF8.GetString(desDecrypt.TransformFinalBlock(buffer, 0, buffer.Length));
        return result;
      }
      catch (Exception e)
      {
        return string.Empty;
      }
    }
    #endregion

      }
    }

  • 相关阅读:
    linux基本操作
    第一个单元测试
    .Net6中的System.Text.Json
    使用 Minio 和 Microsoft SQL Server 2022 组合访问 Data Anywhere
    龙芯发布 .NET 6 SDK 6.0.105ea1 LoongArch64 版本
    .NET 6.0.6 和 .NET Core 3.1.26、Visual Studio 2022 17.2 和 17.3 Preview 2 和 .NET 7.0 Preview 5 同时发布
    一个用于 Microsoft.Extensions.Logging 的测试库MELT
    在OpenCloudOS使用snap安装.NET 6
    distroless 镜像介绍及 基于cblmariner的.NET distroless 镜像的容器
    [AWS] Solve Error: No PEM start marker "b'BEGIN PRIVATE KEY'" found
  • 原文地址:https://www.cnblogs.com/wlming/p/14485826.html
Copyright © 2020-2023  润新知