一个关于DES加密的问题

yswlqj 2009-03-18 02:23:20
我弄这个头都大了,原本以为很容易,就是把加密和解密的代码考下来执行一下就行了,但是现在发现了一个很奇怪的问题就是我有两个程序分别都用DES加密的办法加密同一个字符串,加密部分的代码一模一样,但是程序A每次加密完的加密字符串都不一样,但是自己能解密出来,程序B每次加密完的加密字符串都是一样的,也能自己解密,而且这两个程序加密同一个字符串居然加密完的字符串都不一样,尤其是第一个还可以变,让我很奇怪,是怎么一回事啊。主要是我需要的功能是希望A程序加密完字符串以后存起来,B读取A加密好的字符串然后解密出来,可是现在完全实现不了,解密出来都是乱码
...全文
102 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
yswlqj 2009-03-20
  • 打赏
  • 举报
回复
我用mfc写的,所以可以把文本显示在编辑框里嘛,我现在都不知道怎么形容我这个程序好,有没有已经测试过没什么问题的des的代码给一份,我参考一下,我下了很多源码,不同的环境写的好像也不太一样,最好能给一份适合mfc用的.cpp和.h就行,我研究研究
mosaic 2009-03-19
  • 打赏
  • 举报
回复
加密后都是可打印字符吗? 如果是的话看起来一样就应该是一样的啊。

如果怀疑是数据库问题,建议到sqlserver版发个贴问问。
yswlqj 2009-03-19
  • 打赏
  • 举报
回复
都没有人知道吗?怎么解决呀,我已经焦头烂额了
mosaic 2009-03-19
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 yswlqj 的回复:]
引用 17 楼 tianma2005123 的回复:
LZ可以先用A加密后,直接用B解密,如果这样是正确的,那估计是你往数据库里存取的时候把密文给搞乱了……


我已经试了,是可以的,直接把解密后的文本考到其他程序里解密可以的,就是放到数据库里以后然后再拿出来就不行了,我在之前都说过了从数据库里拿出来的文本看上去和解密后的一样,后来把两个字符串的长度都打印出来了,发现并不一样长,并且有时候不一样长能解开,有时候就解不…
[/Quote]

晕倒,你还能贴一个加密后未存入数据库的数据,以及从数据库取出来的数据? 好让大家看看。
tianma2005123 2009-03-19
  • 打赏
  • 举报
回复
哦,那估计是router的事情了。……
yswlqj 2009-03-19
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 tianma2005123 的回复:]
LZ可以先用A加密后,直接用B解密,如果这样是正确的,那估计是你往数据库里存取的时候把密文给搞乱了……
[/Quote]

我已经试了,是可以的,直接把解密后的文本考到其他程序里解密可以的,就是放到数据库里以后然后再拿出来就不行了,我在之前都说过了从数据库里拿出来的文本看上去和解密后的一样,后来把两个字符串的长度都打印出来了,发现并不一样长,并且有时候不一样长能解开,有时候就解不开,我很头疼,感觉是存到数据库以后存放形式发生变化了
tianma2005123 2009-03-19
  • 打赏
  • 举报
回复
LZ可以先用A加密后,直接用B解密,如果这样是正确的,那估计是你往数据库里存取的时候把密文给搞乱了……
tianma2005123 2009-03-19
  • 打赏
  • 举报
回复
B从库里拿出来为什么不能解了?难道存取有问题?
yswlqj 2009-03-19
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 tianma2005123 的回复:]
des是对称加密,如果你A加密后,B不能正确解密,说明你的加解密函数存在问题……
[/Quote]

现在的问题不是A加密完B不能解,而是A加密完存到数据库里,B拿出来以后不能解……
tianma2005123 2009-03-19
  • 打赏
  • 举报
回复
des是对称加密,如果你A加密后,B不能正确解密,说明你的加解密函数存在问题……
yswlqj 2009-03-19
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 la_feng 的回复:]
sql server里那个字段长度的问题吧,看看是不是,如果存入的字符串长度不等于字段长度,那么数据库好像会自动填充的,我以前在数据库实验时比较账号密码时发现的,填充的好像是空格
[/Quote]

是填充的空格,但是我已经做了处理了,现在更大的问题是有的字符串能解密有的解密不出来,很奇怪
la_feng 2009-03-19
  • 打赏
  • 举报
回复
sql server里那个字段长度的问题吧,看看是不是,如果存入的字符串长度不等于字段长度,那么数据库好像会自动填充的,我以前在数据库实验时比较账号密码时发现的,填充的好像是空格
  • 打赏
  • 举报
回复
加密用opensssl,或者Crpyt++看看
yswlqj 2009-03-18
  • 打赏
  • 举报
回复
其实也不需要什么代码的,就是A程序加密一段字符串然后把加密过的字符串写到sql数据库里,然后B程序从数据库里拿出字符串去解密,发现从数据库拿出来的字符串和加密后的字符串虽然看上去一模一样,但是还真的不一样,我都是用CString接收的,判断是不是相等,发现根本不等,数据库的话我是用nvarchar型的存的,varchar和char也都试过,还是不行,我觉得是字符串编码的问题,为什么两个看上去一模一样的字符串比较却不相等呢?
xiehui3651 2009-03-18
  • 打赏
  • 举报
回复
代码给出来看一下啦
yswlqj 2009-03-18
  • 打赏
  • 举报
回复
自己顶一下吧,看看有没有高手能给指点一下
yswlqj 2009-03-18
  • 打赏
  • 举报
回复
大家帮帮忙,我实在是想不明白了,不知道用什么变量存也不知道用什么变量接受,都是乱码
yswlqj 2009-03-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sadgod 的回复:]
des加密有这个特点:对同一个串加密后的结果,在不同的时间是不同的,但都能解出来。
des加密算法的输入里面除了原始数据,数据长度,key之外还有一个向量,如果你用的算法里没有这个参数,那么就是程序采用了个默认的
你说a加密,b解不出来的话,查看一下是不是两者向量不同。
[/Quote]


现在是可以互相解出来了,但是还有一个问题,就是当我把数据存在数据库里以后再拿出来解密就不对了,我做了个测试,比如我加密123456这个字符串,先让程序自己加密好,然后把加密好的字符串考到数据库中。接下来读数据库中的这个加密字符串读出来以后显示在程序的编辑框里,得到的和刚才自己生成的字符串是一样的,可是解密的时候就有很大的差别,程序自己加密好的字符串就能解密,但是我从数据库读出的数据虽然字符串是一样的但是解密就是乱码,是不是我从数据库接收的变量不对啊
palsword 2009-03-18
  • 打赏
  • 举报
回复
其它先不管,你确定你的a,b的密钥用的同一个?
sadgod 2009-03-18
  • 打赏
  • 举报
回复
des加密有这个特点:对同一个串加密后的结果,在不同的时间是不同的,但都能解出来。
des加密算法的输入里面除了原始数据,数据长度,key之外还有一个向量,如果你用的算法里没有这个参数,那么就是程序采用了个默认的
你说a加密,b解不出来的话,查看一下是不是两者向量不同。
加载更多回复(1)

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧