求des加密的源码,
解决方案 »
- vc2008 配置的简单问题!!
- 如果我只想更新画面上的两个精灵的位置,其它不变,我怎么用InvalidateRgn来控制呢?
- 怎么样实时的读取串口发过的数据?是用消息?还是其他的什么?
- win32 app 如何在InitInstance中编写系统托盘,使exe运行后最小化到托盘?
- 如何清空memDC中的内容,如何实现两个memDC之间的拷贝?
- 求教:WINDOWS里,在一个进程中如何关闭另一个进程?
- 解析字符串的问题??
- 两个简单问题!
- .ax什么东西啊,AppWizard怎么没有生成MyProject.ax的向导啊!
- 后缀为.NLC的文件是用什么阅读器来读的?
- 使用CTreectrl时点击Item前面的'+',怎么样获得'+'右边的Item的文字项???
- 请教窗口显示次序的问题
http://www.vckbase.com/document/viewdoc/?id=623
DES算法及其在VC++6.0下的实现(下):
http://www.vckbase.com/document/viewdoc/?id=624
我看过这个代码,我在项目中要把加密好的串传给C#写的程序,由于C#用的是microsoft提供的库写的des加密,所以总和我的串对应不起来.
DES 100行
可以找到用C语言写100行的DES加密算法
下面是c#实现的des/// <summary>
/// Des加密的实现
/// </summary>
/// <param name="pToEncrypt">被加密的串,支持中文</param>
/// <param name="sKey">8位英文字母</param>
/// <returns>加密后的串</returns>
static public string DesEncrypt(string pToEncrypt, string sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt); //建立加密对象的密钥和偏移量
//原文使用ASCIIEncoding.ASCII方法的GetBytes方法
//使得输入密码必须输入英文文本
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(),CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
StringBuilder ret = new StringBuilder();
foreach(byte b in ms.ToArray())
{
ret.AppendFormat("{0:X2}", b);
}
ret.ToString();
return ret.ToString();
}
/// <summary>
/// Des解密的实现
/// </summary>
/// <param name="pToEncrypt">被解密的串,支持中文</param>
/// <param name="sKey">8位英文字母</param>
/// <returns>解密后的串</returns>
static public string DesDecrypt(string pToDecrypt, string sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider(); byte[] inputByteArray = new byte[pToDecrypt.Length / 2];
for(int x = 0; x < pToDecrypt.Length / 2; x++)
{
int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
inputByteArray[x] = (byte)i;
} //建立加密对象的密钥和偏移量,此值重要,不能修改
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(),CryptoStreamMode.Write); cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
//建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象
StringBuilder ret = new StringBuilder(); return System.Text.Encoding.Default.GetString(ms.ToArray());
}