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. Android NDK课程录制完毕上线

    近期依据公司安排,录制了Android NDK开发的内容,总体课程能够在www.iotekclass.com上看到.兴许会慢慢的用blog把这些内容展示出来. 此课程大纲例如以下: 第一章 NDK简单 ...

  2. 菜鸟nginx源代码剖析数据结构篇(七) 哈希表 ngx_hash_t(下)

      菜鸟nginx源代码剖析数据结构篇(七) 哈希表 ngx_hash_t(下)   Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:B ...

  3. 在resin配置參数实现JConsole远程监控JVM

    在Resin配置參数实现JConsole远程监控JVM 在Resin中配置中配置下列參数,就能够是实现了! <jvm-arg>-Dcom.sun.management.jmxremote& ...

  4. android 图片特效处理之 光晕效果

    这篇将讲到图片特效处理的图片光晕效果.跟前面一样是对像素点进行处理,本篇实现的思路可参见android图像处理系列之九--图片特效处理之二-模糊效果和android图像处理系列之十三--图片特效处理之 ...

  5. 使程序在Linux下后台运行 (关掉终端继续让程序运行的方法)

    你是否遇到过这样的情况:从终端软件登录远程的Linux主机,将一堆很大的文件压缩为一个.tar.gz文件,连续压缩了半个小时还没有完成,这时,突然你断网了,你登录不上远程Linux主机了,那么前面的半 ...

  6. 57.C++处理转义字符

    #include <iostream> #include <string> #include <cstdlib> using namespace std; void ...

  7. [ Java ] [ Spring ] [ Spring MVC ] Tutorial

    中文 Spring 教學 http://hatemegalaxy.blogspot.tw/2014/09/spring-framework-useful-tutorials-for.html 英文 S ...

  8. PS:切图

    1.从psd中获取资源 2.基本了解 3.简单的图片操作和调整 4.对自己的审美提高一.界面设置: 1.新建设置:ctr+n; 预设:Web,大小Web(1920*1080) 背景:透明 2.移动工具 ...

  9. c# 多态的美丽(虚方法、抽象、接口实现)

    面向对象3大特性:封装.继承.多态. 面向对象2大原则: 1)里氏替换原则:子类可以给父类,父类不能赋给子类. 2)开放封闭原则: 封装变化,降低耦合.(对扩展开放,对修改封闭) ********** ...

  10. Android经常使用自己定义控件(二)

           经常使用的Android自己定义控件分享 http://www.see-source.com//androidwidget/list.html?type=&p=1