第三方的加密规则约定:加密经过3DES加密后的Base64 编码

最近在对接一个第三方接口,请求参数和响应参数全采用3des加密规则,由于我是用.NET对接的,而第三方是Java开发的,所以两种程序之间采用的算法有一点差异,java的3des加密采用的是"DESede/CBC/PKCS5Padding"规则,所以对应的C#规则是"PaddingMode.PKCS7和CipherMode.CBC",使用CBC模式的话在C#下必须传入加密向量IV(固定长度8位),默认"12345678",加密密钥和IV双方约定好即可,如果是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, string iv = "12345678")
{
  try
  {
    var des = new TripleDESCryptoServiceProvider
    {
      Key = Encoding.UTF8.GetBytes(aStrKey),
      Mode = mode
    };
    if (mode == CipherMode.CBC)
    {
      des.IV = Encoding.UTF8.GetBytes(iv);
    }
    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, string iv = "12345678")
{
  try
  {
    var des = new TripleDESCryptoServiceProvider
    {
      Key = Encoding.UTF8.GetBytes(aStrKey),
      Mode = mode,
      Padding = PaddingMode.PKCS7
    };
    if (mode == CipherMode.CBC)
    {
      des.IV = Encoding.UTF8.GetBytes(iv);
    }
    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

  }
}

C# 3Des加密解密的更多相关文章

  1. iOS 3DES加密解密(一行代码搞定)

    3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称.它相当于是对每个数据块应用三次DES加密算法.由于计 ...

  2. 简进祥==iOS 3DES加密解密

    3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称.它相当于是对每个数据块应用三次DES加密算法.由于计 ...

  3. C# Java 3DES加密解密 扩展及修正\0 问题

    注: C#已亲测及做扩展, Java 部分未做验证 /// <summary> /// 3DES加密解密 /// ------------------------------------- ...

  4. 【推荐】JAVA基础◆浅谈3DES加密解密

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  5. 3DES加密解密

    C#3DES加密解密,JAVA.PHP可用 using System; using System.Security.Cryptography; using System.Text; namespace ...

  6. Des与3Des加密解密

    /// <summary> /// Des和3Des算法 /// </summary> public class Des { /// <summary> /// D ...

  7. C#的3DES加密解密算法

    C#类如下: using System; using System.Collections.Generic; using System.Text; using System.Security.Cryp ...

  8. JAVA和C# 3DES加密解密

    最近 一个项目.net 要调用JAVA的WEB SERVICE,数据采用3DES加密,涉及到两种语言3DES一致性的问题, 下面分享一下, 这里的KEY采用Base64编码,便用分发,因为Java的B ...

  9. JAVA安卓和C# 3DES加密解密的兼容性问题(2013年8月修改版)

    近 一个项目.net 要调用JAVA的WEB SERVICE,数据采用3DES加密,涉及到两种语言3DES一致性的问题, 下面分享一下, 这里的KEY采用Base64编码,便用分发,因为Java的By ...

  10. Java中3DES加密解密与其他语言(如C/C++)通信

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

随机推荐

  1. sessionStorage 与 localStorage 重新认识?

    之前写过一次关于 js存储的总结,但是今天在项目中遇到一个bug让我重新在认识 sessionStorage 与 localStorage.以下的介绍都是基于同源下进行的,仔细看下面的案例: a.ht ...

  2. PostScript

    https://baike.baidu.com/item/PostScript/2192822?fr=aladdin PostScript是一种编程语言,最适用于列印图像和文字(无论是在纸.胶片或非物 ...

  3. MyBatis-11-一对多处理

    11.一对多处理 比如:一个老师拥有多个学生! 对于老师而言,就是一对多的关系! 环境搭建 环境搭建,和刚才一样 实体类 @Data public class Teacher { private in ...

  4. MyBatis-07-分页

    7.分页 思考:为什么要分页? 减少数据的处理量 7.1.使用Limit分页 select * from user limit startIndex,pageSize 使用Mybatis实现分页,核心 ...

  5. 【洛谷P2480】古代猪文

    题目大意:求 \[ G^{\sum\limits_{d|N}\binom{n}{k}} mod\ \ 999911659 \] 题解:卢卡斯定理+中国剩余定理 利用卢卡斯定理求出指数和式对各个素模数的 ...

  6. Java8-Stream-No.13

    import java.security.SecureRandom; import java.util.Arrays; import java.util.stream.IntStream; publi ...

  7. 【方法】JS判断当前页面环境:PC端/移动端,安卓/IOS,微信环境/QQ环境等等

    [主要知识] 浏览器设备信息:navigator.userAgent(本文中主要用到知识) 浏览器版本信息:navigator.appVersion var ua = navigator.userAg ...

  8. C++头文件中#pragma once与#ifndef……#define……#endif

    两者功能一样,防止重复包含被多次编译.建议头文件加入#pragma once C++头文件开头的两句与结尾的一句#ifndef <标识>#define <标识>类代码#endi ...

  9. SQL Server 基础:ADO.NET

    序言 Connection 主要提供与数据库的连接功能 Command 用于返回数据.修改数据.运行存储过程以及发送或检索参数信息的数据库命令 CommandType 获取或设置Command对象要执 ...

  10. hdu 5869 Different GCD Subarray Query BIT+GCD 2016ICPC 大连网络赛

    Different GCD Subarray Query Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K ( ...