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

      }
    }

  • 相关阅读:
    多线程-工作组模式
    iOS端架构、基本组成与使用说明
    iOS,Core Animation--负责视图的复合功能
    Container Views
    IOS UIView 01-View开始深入 绘制像素到屏幕上
    View Programming Guide for iOS
    UI绘图与信息、样式
    iOS绘图框架CoreGraphics分析
    iOS开发系列--打造自己的“美图秀秀”
    Array与NSArray关系
  • 原文地址:https://www.cnblogs.com/wlming/p/14485826.html
Copyright © 2011-2022 走看看