zoukankan      html  css  js  c++  java
  • 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

      }
    }

  • 相关阅读:
    numpy 基础 —— np.linalg
    图像旋转后显示不完全
    opencv ---getRotationMatrix2D函数
    PS1--cannot be loaded because the execution of scripts is disabled on this system
    打开jnlp Faild to validate certificate, the application will not be executed.
    BATCH(BAT批处理命令语法)
    oracle vm virtualbox 如何让虚拟机可以上网
    merge 实现
    Windows batch,echo到文件不成功,只打印出ECHO is on.
    python2.7.6 , setuptools pip install, 报错:UnicodeDecodeError:'ascii' codec can't decode byte
  • 原文地址:https://www.cnblogs.com/wlming/p/14485826.html
Copyright © 2011-2022 走看看