using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json; namespace 加密接口
{
class Program
{
//uname:zyy144,upwd:ab12356,uid:6846
static void Main(string[] args)
{
string password = "http04";
var json = TextJson("http04", password, "", "内容加【wufdf】", "", "");
string userid = ""; string text64 = Text64(password, json);
var rlt= HttpRequestHelper.Request(userid,text64, "http://localhost/ensms.ashx");
}
public static string Md5Encrypt(string text)
{
var originalBytes = Encoding.UTF8.GetBytes(text);
byte[] encodedBytes;
using (var md5 = new MD5CryptoServiceProvider())
{
encodedBytes = md5.ComputeHash(originalBytes);
}
return ToHexString(encodedBytes);
}
private static readonly char[] HexChars = { '', '', '', '', '', '', '', '', '', '', 'A', 'B', 'C', 'D', 'E', 'F' };
/// <summary>
/// 转换成16进制的字符串形式。
/// </summary>
/// <param name="bytes">要转铁的字节数组</param>
/// <returns>返回转铁后的值</returns>
public static string ToHexString(byte[] bytes)
{
int chArrayLength = bytes.Length * ;
var charArray = new char[chArrayLength];
int index = ;
for (var i = ; i < chArrayLength; i += )
{
byte b = bytes[index++];
charArray[i] = HexChars[b / ];
charArray[i + ] = HexChars[b % ];
}
return new String(charArray);
}
/// <summary>
/// 对指定的字符串,进行md5,32加密,并返回加密后的节字形式的文本。
/// </summary>
/// <param name="text">要加密码的字符串</param>
/// <param name="encoding">指定编码方式</param>
/// <returns>返回加密后的节字形式的文本</returns>
public static string Md5Encrypt(string text, Encoding encoding)
{
var originalBytes = encoding.GetBytes(text);
byte[] encodedBytes;
using (var md5 = new MD5CryptoServiceProvider())
{
encodedBytes = md5.ComputeHash(originalBytes);
}
return ToHexString(encodedBytes);
}
/// <summary>
/// 生成json 字符串对象
/// </summary>
/// <param name="username"></param>
/// <param name="password"></param>
/// <param name="mobile"></param>
/// <param name="text"></param>
/// <param name="ext"></param>
/// <param name="sendTime"></param>
/// <returns></returns>
private static string TextJson(string username,string password,string mobile,string text ,string ext,string sendTime)
{
string Stamp = DateTime.Now.ToString("MMddHHmmss");
Text64Data text64Data = new Text64Data() {
UserName = username,
Secret = Md5Encrypt(password + Stamp),
Stamp = Stamp,
Moblie=mobile,
Text=text,
Ext=ext,
SendTime =sendTime
};
var json= JsonConvert.SerializeObject(text64Data);
return json;
}
/// <summary>
///
/// </summary>
/// <param name="password"></param>
/// <returns></returns>
private static byte[] GetKey(string password)
{
// Key 的生成方式,将Password转为字节数组,取前8位(不足8位,右侧补字节0)
password = password.Length >= ? password.Substring(, ) : password;
byte[] pwd = Encoding.UTF8.GetBytes(password);
byte[] key = new byte[];
for (int i = ; i < pwd.Length; i++)
{
key[i] = pwd[i];
}
return key;
}
/// <summary>
/// base64string
/// </summary>
/// <param name="password"></param>
/// <param name="json"></param>
/// <returns></returns>
private static string Text64(string password,string json)
{ byte[] key = GetKey(password);
byte[] content = Encoding.UTF8.GetBytes(json);
return Convert.ToBase64String( DESEncrypt(content,key));
}
/// <summary>
/// des加密
/// </summary>
/// <param name="original"></param>
/// <param name="key"></param>
/// <returns></returns>
public static byte[] DESEncrypt(byte[] original, byte[] key)
{ using (var des = new DESCryptoServiceProvider())
{
des.Padding = PaddingMode.PKCS7;
des.Mode = CipherMode.CBC;
des.Key = key;
des.IV = key;
using (var ms = new System.IO.MemoryStream())
{
var cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(original, , original.Length);
cs.FlushFinalBlock();
cs.Close();
cs.Dispose(); return ms.ToArray();
}
}
}
}
public class Text64Data
{
public string UserName { get; set; }
public string Secret { get; set; }
public string Stamp { get; set; } public string Moblie { get; set; }
public string Text { get; set; }
public string Ext { get; set; }
//yyyy-MM-dd HH:mm:ss
public string SendTime { get; set; }
} }
注意编码格式:很重要

Des 加密cbc模式 padding的更多相关文章

  1. C++ 使用openssl库实现 DES 加密——CBC模式 && RSA加密——公加私解——私加公解

    之前工作上需要用C++把软件生成的用户序列号用des加密cbc的模式,加密后为二进制,转化为十六进制,然后提供给java写的授权码管理平台. java平台会根据用户序列号,生成一个授权码,授权码是用r ...

  2. AES加密CBC模式兼容互通四种编程语言平台【PHP、Javascript、Java、C#】

    原文:AES加密CBC模式兼容互通四种编程语言平台[PHP.Javascript.Java.C#] 由于本人小菜,开始对AES加密并不了解,在网络上花了比较多时间查阅资料整理: 先简单从百度找来介绍: ...

  3. DES加密ECB(模式) golang

    Java默认DES算法使用DES/ECB/PKCS5Padding,而golang认为这种方式是不安全的,所以故意没有提供这种加密方式,那如果我们还是要用到怎么办?下面贴上golang版的DES EC ...

  4. C++调用openssl实现DES加密解密cbc模式 zeropadding填充方式 pkcs5padding填充方式 pkcs7padding填充方式

    ============================================== des   cbc  加密 zeropadding填充方式 ======================= ...

  5. DES加解密 cbc模式 的简单讲解 && C++用openssl库来实现的注意事项

    DES cbc是基于数据块加密的.数据块的长度为8字节64bit.以数据块为单位循环加密,再拼接.每个数据块加密的秘钥一样,IV向量不同.第一个数据快所需的IV向量,需要我们提供,从第二个数据块开始, ...

  6. C#和PHP加密结果一致的DES加密解密算法。php实现和c#一致的DES加密解密

    DES加密算法 des对称加密,是一种比较传统的加密方式,其加密运算.解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码(称为对称密码),是一种对称加密 ...

  7. Android DES加密的CBC模式加密解密和ECB模式加密解密

    DES加密共有四种模式:电子密码本模式(ECB).加密分组链接模式(CBC).加密反馈模式(CFB)和输出反馈模式(OFB). CBC模式加密: import java.security.Key; i ...

  8. DES加密模式详解

    DES加密模式详解 http://www.cnblogs.com/Lawson/archive/2012/05/20/2510781.html http://www.blogjava.net/wayn ...

  9. 关于DES加密中的 DESede/CBC/PKCS5Padding

    今天看到一段3DES加密算法的代码,用的参数是DESede/CBC/PKCS5Padding,感觉比较陌生,于是学习了一下. 遇到的java代码如下: Cipher cipher=Cipher.get ...

随机推荐

  1. BZOJ 2708 [Violet 1]木偶 DP

    题意:id=2708">链接 方法: DP 解析: 这题太神辣. 做梦都没想到DP啊,反正我不会. 先谈一个我有过的错的想法. 最小费用最大流? 能匹配的边连费用为1的,不能匹配的连费 ...

  2. modSecurity规则学习(三)——SecRule

    通用格式 SecRule VARIABLES OPERATOR [TRANSFORMATION_FUNCTIONS, ACTIONS]   阶段phase (1)request headers (2) ...

  3. 运动识别之HOJ3D和HMM

    http://cvrc.ece.utexas.edu/Publications/Xia_HAU3D12.pdf   View Invariant Human Action Recognition Us ...

  4. SQL 金额添加千分位

    SELECT CONVERT(NVARCHAR(50),CAST(1000000 AS MONEY),1) SELECT CONVERT(NVARCHAR,CAST(1343432432434.8 A ...

  5. HDU 4731 Minimum palindrome 打表找规律

    http://acm.hdu.edu.cn/showproblem.php?pid=4731 就做了两道...也就这题还能发博客了...虽然也是水题 先暴力DFS打表找规律...发现4个一组循环节.. ...

  6. python hmac 加密

    python2 :  key 是秘钥 类型为 str msg 要加密的文件 str digestmod 要加密的方式 python3: key 是秘钥 类型为 byte msg 要加密的文件 byte ...

  7. 小米开源文件管理器MiCodeFileExplorer-源码研究(2)-2个单实例工具类

    从本篇开始,讲解net.micode.fileexplorer.util工具包中的类.这个包下的类,功能也比较单一和独立.很多代码的思想和实现,可以用于JavaWeb和Android等多种环境中. 一 ...

  8. POJ 4047 Garden

    Garden Time Limit: 1000ms Memory Limit: 65536KB This problem will be judged on PKU. Original ID: 404 ...

  9. Leetcode47: Palindrome Linked List

    Given a singly linked list, determine if it is a palindrome. 推断一个链表是不是回文的,一个比較简单的办法是把链表每一个结点的值存在vect ...

  10. apache2 虚拟机多用户多站点设置 mpm-itk

    MPM设置 https://bbs.csdn.net/topics/390479795/ vim /opt/lampp/etc/extra/httpd-ssl.conf vim /opt/lampp/ ...