最新评论
Re:HP大中华区总裁孙振耀退休感言 qigaee 2012-02-05 19:33
哦 我承认我是一个茫人!!!
Re:[原创]DES加密解密程序2.0发布 kaya 2011-12-30 17:12
你好,能給我Borland C++ Builder 6.0的代码,謝謝!
lovewindows@gmail.com
楼主能不能发我c#版本的。谢谢/ cqzhang@yeesky.net
楼主你好,能否发送份BCB的完整代码,谢谢!
wkqlxb@sina.com
请问搂主,密文以原始字符显示为什么解密后有乱码,有办法解决吗?谢谢
Re:发布yxyDES2的C语言版 benbenfly 2011-08-04 23:47
博主能否将des和3des编译成dll,以便于在其他程序中调用呢?
我从这http://www.pin5i.com/showtopic-23753.html下载的yxyDES_VC,跟网路上找到的其他S-box的资料核对了一下,发现S1跟S4的好像有些许不同,是否有输入错误??
经过修正常网路资料,发现再次执行可以正确解密回来了^^
S1
14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7,
0, 15, 7, 4, [12], 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8,
4, 1,[15], 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0,
15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13,
S2
7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15,
13, 8, 11, 5, 6, 15, 0, 3, [6], 7, 2, 12, 1, 10, 14, 9,
10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4,
3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14,
用[]框起来的就是我找到的错误的地方.
楼主你好
我用普通的DES加密测试
密钥:12345678
char temp[16]={43 , 43 , 54 , 51 , 43 , 43 , 54 , 51 , 42 , 42 , 49 , 46 , 46 , 46 , 49 , 49};
将temp这个char array拿去进行加密后再解密,其结果会无法正确解密回来,
解密回来的资讯>>{43 , 43 , 54 , 51 , 0 , 223 , 218 , 90 , 178 , 40 , 93 , 168 , 38 , 145 , 5 , 59};
发现解密后的资讯,他的前4个部分{43,43,54,51}的确跟原来的一样,但是后面的12个部分却是跟密文的部份一样.
对于楼主释出的源代码,我还没有很了解,所以想请问楼主这个这是发生什么问题?? 那该用什么方法解决???
Re:迅雷产品经理笔试题 caodj 2011-07-22 10:52
第一次 盐分成 70 70
第二次 盐分成 70 35 35
第三次 把70和35的混在一起为105 加一个5的砝码,平衡后带砝码一边的盐为50 把其他的盐混在一起就是90
第二题
一面放两个药,重的一面为坏的,由重的一面拿下一个药,如果平衡则剩下下的为坏的,否则拿下的为坏的
Re:迅雷产品经理笔试题 mqiezi 2011-07-06 05:30
2.有4瓶药,其中一瓶变质了,已知变质的药的重量为没变质的质量+1,怎样只称一次就能找出变质的药.
11 22 33 44
1144 vs 2233
左1 4
右 2 3
这句似乎有点问题:
byte[] StrRes = Encoding.Default.GetBytes(Source_String);
Encoding.Default 会随着操作系统ANSI本地代码页不同而变化(比如日文操作系统和中文操作系统就不同),因此导致上面的程序在不同语言的操作系统上会哈希得不同的结果。
@乖乖的小峰峰
安装vc_redist,Google 一下就出来了,只有几兆
上面的代码在写for循环的时候少了一个break,
如果第j个字节不为0,则把前j+1个字节读出,然后退出for循环
for(int j = 7; j >= 0; j--)
{
if(buff[j] != 0)
{
fwrite(myDES->GetPlaintext(),sizeof(char),j+1,fpDst);
break;
}
}
解密的时候需要判断是否为0,
代码如下
CString szSrcPath,szDstPath,szKey1,szKey2;
this->GetDlgItemTextA(IDC_EDIT14,szKey1);
this->GetDlgItemTextA(IDC_EDIT15,szKey2);
this->GetDlgItemTextA(IDC_EDIT10,szSrcPath);
this->GetDlgItemTextA(IDC_EDIT11,szDstPath);
FILE *fpSrc,*fpDst;
char buff[8] = {0};
long fileSize = 0;
if(szSrcPath == "")
{
MessageBox(TEXT("没有选择要打开的文件路径"),TEXT("BeeLock"),NULL);
}
if(szDstPath == "")
{
MessageBox(TEXT("没有选择文件保存路径"),TEXT("BeeLock"),NULL);
}
if(szKey1 == "")
{
MessageBox(TEXT("密码不能为空"),TEXT("BeeLock"),NULL);
}
if(szKey2 == "")
{
MessageBox(TEXT("确认密码不能为空"),TEXT("BeeLock"),NULL);
}
if(this->DesComparePWD(szKey1,szKey2) == false)
{
MessageBox("两次输入的密码不一致!");
}
else
{
if((fpSrc = fopen(szSrcPath.GetBuffer(),"rb")) == NULL)
{
MessageBox("打不开源文件!","错误",MB_OK | MB_ICONERROR);
}
if((fpDst = fopen(szDstPath.GetBuffer(),"wb")) == NULL)
{
MessageBox("打不开目的文件!","错误",MB_OK | MB_ICONERROR);
}
else
{
fseek(fpSrc,0,SEEK_SET);
fseek(fpSrc,0,SEEK_END);
fileSize = ftell(fpSrc);
rewind(fpSrc);
DES *myDES = new DES();
myDES->InitializeKey(szKey1.GetBuffer(),0);
int circleNum = fileSize / 8;
for(int i = 0; i < circleNum; i++)
{
memset(buff,0,8);
fread(buff,sizeof(char),8,fpSrc);
myDES->DecryptData(buff,0);
fwrite(myDES->GetPlaintext(),sizeof(char),8,fpDst);
}
//解决解密时多读了被填充的0的问题
memset(buff,0,8);
fread(buff,sizeof(char),8,fpSrc);
myDES->DecryptData(buff,0);
for(int j = 7; j >= 0; j--)
{
if(buff[j] != 0)
{
fwrite(myDES->GetPlaintext(),sizeof(char),j+1,fpDst);
}
}
fclose(fpSrc);
fclose(fpDst);
MessageBox("解密完成!","提示",MB_OK | MB_ICONINFORMATION);
this->SetDlgItemTextA(IDC_EDIT14,"");
this->SetDlgItemTextA(IDC_EDIT15,"");
this->SetDlgItemTextA(IDC_EDIT10,"");
this->SetDlgItemTextA(IDC_EDIT11,"");
}
}
对解密后文件末尾出现乱码做了修改,原因是,加密是以8字节为单位,不足8为,以0补齐,所以解密时对凑补的0解密就出现了有乱码,所以只要在解密时判断,不为0时写入解密文件即可
代码如下:
CString szSrcPath,szDstPath,szKey1,szKey2;
this->GetDlgItemTextA(IDC_EDIT12,szKey1);
this->GetDlgItemTextA(IDC_EDIT13,szKey2);
this->GetDlgItemTextA(IDC_EDIT9,szSrcPath);
this->GetDlgItemTextA(IDC_EDIT6,szDstPath);
FILE *fpSrc,*fpDst;
char buff[8] = {0};
long fileSize = 0;
if(szSrcPath == "")
{
MessageBox(TEXT("没有选择要打开的文件路径"),TEXT("BeeLock"),NULL);
}
if(szDstPath == "")
{
MessageBox(TEXT("没有选择文件保存路径"),TEXT("BeeLock"),NULL);
}
if(szKey1 == "")
{
MessageBox(TEXT("密码不能为空"),TEXT("BeeLock"),NULL);
}
if(szKey2 == "")
{
MessageBox(TEXT("确认密码不能为空"),TEXT("BeeLock"),NULL);
}
if(this->DesComparePWD(szKey1,szKey2) == false)
{
MessageBox("两次输入的密码不一致!");
}
else
{
if((fpSrc = fopen(szSrcPath.GetBuffer(),"rb")) == NULL)
{
MessageBox("打不开源文件!","错误",MB_OK | MB_ICONERROR);
}
if((fpDst = fopen(szDstPath.GetBuffer(),"wb")) == NULL)
{
MessageBox("打不开目的文件!","错误",MB_OK | MB_ICONERROR);
}
else
{
fseek(fpSrc,0,SEEK_SET);
fseek(fpSrc,0,SEEK_END);
fileSize = ftell(fpSrc);
rewind(fpSrc);
DES *myDES = new DES();
myDES->InitializeKey(szKey1.GetBuffer(),0);
while(!feof(fpSrc))
{
memset(buff,0,8);
fread(buff,sizeof(char),8,fpSrc);
myDES->EncryptData(buff,0);
fwrite(myDES->GetCiphertextInBytes(),sizeof(char),8,fpDst);
}
fclose(fpSrc);
fclose(fpDst);
MessageBox("加密完成!","提示",MB_OK | MB_ICONINFORMATION);
this->SetDlgItemTextA(IDC_EDIT12,"");
this->SetDlgItemTextA(IDC_EDIT13,"");
this->SetDlgItemTextA(IDC_EDIT9,"");
this->SetDlgItemTextA(IDC_EDIT6,"");
}
}
[quote]wuhongzhao:有没有java版本的Demo啊?[/quote]
这个程序运行后 生成.exe的MFC文件 放在别人的电脑为什么运行不了
怎么解决这个问题 把它变成通用软件不需要框架支持
Re:[学习]SVM入门(一) 穆杉 2011-04-21 16:19
您好,我最近在做水质参数的反演,想利用SVR支持向量回归的建立反演模型,通过遥感图像的反射率反演水质参数,我直接利用Weka进行训练得出参数,然后想利用这些参数进行回归预测,但不知道怎么建立方程
此前也建立神经网络的反演模型,BP神经网络的方程比较清晰,通过Weka计算权重和阈值,直接代入神经网络的方程,就能根据方程进行预测。但是对于SVM我一直不知道如何利用取得的参数建立方程,它的方程似乎很复杂,不知道怎么代参数...请赐教...
学习了,最近在看消息认证方面的东西..呵呵,加解密算法也看了看。
像这么详细的讲解真是少见..我辈受益颇多啊
不知道 博主 有没空,也讲讲 MAC(消息认证)..
特别是用的最多的MD5
[quote]Senna:请指教一下:这个DES加密怎样才能做成与DES加密解密工具2.1里生成的密码一样?[/quote]
[quote]jansnes:
C# DES 加密的结果 与 C++ ,JAVA ,DELPHI 得出来的 DES 加密结果不一样,
请问这是怎么回事吗?
C# 代码
//加密方法
public string Encrypt(string pToEncrypt, string sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
des.Mode = CipherMode.ECB;
//把字符串放到byte数组中 ...[/quote]
C# DES 加密的结果 与 C++ ,JAVA ,DELPHI 得出来的 DES 加密结果不一样,
请问这是怎么回事吗?
C# 代码
//加密方法
public string Encrypt(string pToEncrypt, string sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
des.Mode = CipherMode.ECB;
//把字符串放到byte数组中 //原来使用的UTF8编码,我改成Unicode编码了,不行
byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
//byte[] inputByteArray=Encoding.Unicode.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();
}
与学渊 DES2.1 的结果不一样? 请问C# 怎么能与其它 语言的DES 统一,互转?
尹学渊出来解答下吧
Re:[分享]软件开发---全套规范 zelad 2011-03-20 15:40
这个很好,很规范,谢谢分享!
多谢多谢!!终于把des算法全部搞清楚了,楼主讲得很不错。
Re:HP大中华区总裁孙振耀退休感言 真爱无悔 2010-12-28 13:29
多谢lz分享。。。。
Re:[原创]DES加密解密程序2.0发布 applehao 2010-11-10 12:40
楼主您能给我一份VC++的代码吗?谢谢!948146251@qq.com
您好,尹学渊,感谢分享这么好的东西。
我现在想在VC++里使用您的类对数据进行加密,然后在C#里对数据进行解密。搞了好久都没完成。我使用您在另外一篇文章里提供的C# DES方法,无论是加密还是解决,都跟这个工具生成的代码不一样。
如果您有现成的VC++与C# DES加密解密交互的代码。麻烦给我发一份,"garyyeh@163.com",实现C++加密 C#解密和C#加密 C++解密
感激不尽!
同问,C#加密出来的结果好像不一样,能给我一个C#的代码吗?11767762@qq.com,谢谢。
Re:[分享]软件开发---全套规范 freeish 2010-10-19 21:13
谢谢楼主 我正准备自己开始做小项目 到时候碰到解决不了的 请教楼主哈