Des 加密cbc模式 padding
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的更多相关文章
- C++ 使用openssl库实现 DES 加密——CBC模式 && RSA加密——公加私解——私加公解
之前工作上需要用C++把软件生成的用户序列号用des加密cbc的模式,加密后为二进制,转化为十六进制,然后提供给java写的授权码管理平台. java平台会根据用户序列号,生成一个授权码,授权码是用r ...
- AES加密CBC模式兼容互通四种编程语言平台【PHP、Javascript、Java、C#】
原文:AES加密CBC模式兼容互通四种编程语言平台[PHP.Javascript.Java.C#] 由于本人小菜,开始对AES加密并不了解,在网络上花了比较多时间查阅资料整理: 先简单从百度找来介绍: ...
- DES加密ECB(模式) golang
Java默认DES算法使用DES/ECB/PKCS5Padding,而golang认为这种方式是不安全的,所以故意没有提供这种加密方式,那如果我们还是要用到怎么办?下面贴上golang版的DES EC ...
- C++调用openssl实现DES加密解密cbc模式 zeropadding填充方式 pkcs5padding填充方式 pkcs7padding填充方式
============================================== des cbc 加密 zeropadding填充方式 ======================= ...
- DES加解密 cbc模式 的简单讲解 && C++用openssl库来实现的注意事项
DES cbc是基于数据块加密的.数据块的长度为8字节64bit.以数据块为单位循环加密,再拼接.每个数据块加密的秘钥一样,IV向量不同.第一个数据快所需的IV向量,需要我们提供,从第二个数据块开始, ...
- C#和PHP加密结果一致的DES加密解密算法。php实现和c#一致的DES加密解密
DES加密算法 des对称加密,是一种比较传统的加密方式,其加密运算.解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码(称为对称密码),是一种对称加密 ...
- Android DES加密的CBC模式加密解密和ECB模式加密解密
DES加密共有四种模式:电子密码本模式(ECB).加密分组链接模式(CBC).加密反馈模式(CFB)和输出反馈模式(OFB). CBC模式加密: import java.security.Key; i ...
- DES加密模式详解
DES加密模式详解 http://www.cnblogs.com/Lawson/archive/2012/05/20/2510781.html http://www.blogjava.net/wayn ...
- 关于DES加密中的 DESede/CBC/PKCS5Padding
今天看到一段3DES加密算法的代码,用的参数是DESede/CBC/PKCS5Padding,感觉比较陌生,于是学习了一下. 遇到的java代码如下: Cipher cipher=Cipher.get ...
随机推荐
- java web应用调用python深度学习训练的模型
之前参见了中国软件杯大赛,在大赛中用到了深度学习的相关算法,也训练了一些简单的模型.项目线上平台是用java编写的web应用程序,而深度学习使用的是python语言,这就涉及到了在java代码中调用p ...
- 【Uva 1601】The Morning after Halloween
[Link]: [Description] 给你一张平面图; 最多可能有3只鬼; 给出这几只鬼的初始位置; 然后,这几只鬼有各自的终点; 每秒钟,这几只鬼能同时移动到相邻的4个格子中的一个 任意两只鬼 ...
- PhoneGap/Cordova Android应用签名公布注意事项
今天最终要公布Android HybirdApp了,安装曾经做原生应用的流程公布签名Apk,没想到立即遇到了几个问题.如今把它们的解决的方法整理下来. export signed Apk 遇到以下错误 ...
- Lusac定理
转载大佬的模版:http://www.cnblogs.com/vongang/archive/2012/12/02/2798138.html
- JavaScript学习总结(10)——实用JS代码大全
事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture(); event. ...
- AutoCAD 许可管理器不起作用,或未正确安装,现在将关闭
问题描述 重新安装了也还是这样,而且第二次打开都跳不出申请码界面就关闭了. 问题原因,初步认为:AutoCAD 在首次弹出申请激活类型的类型时,直接选择了网络激活,而且没有激活成功.再想通过激活码的方 ...
- [AngularFire] Angular File Uploads to Firebase Storage with Angular control value accessor
The upload class will be used in the service layer. Notice it has a constructor for file attribute, ...
- Codeforces Round #316 (Div. 2) A B C
A. Elections time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- Asp中JSON的使用
我对asp全然不懂,因为须要使用json的结构,就研究了一下asp的json的使用,拼接一个json的字符串. 測试用例中使用到了一个lib文件: Json_2.0.3.asp <% ' ' V ...
- 史上最简单,js并获取手机型号
原先获取不了苹果系列的型号,但转换思路,先推断是否是苹果,再用分辨率获取型号 //获取手机型号函数begin function getPhoneType(){ //正则,忽略大写和小写 var pa ...