我将用户的密码加密后存入SQL里,用户登陆的时候再按照用户名把相应的加密后的密文从数据库里读出来解密后和用户输入的密码相比较以判断密码是否正确
,因为密码是不定长的而且加密后的密文结尾可能存在空格,现在遇到一个问题:如果我在SQL里把保存用户密码密文的数据类型设置为varchar,数据长度设置为30,那么如果加密后的密文结尾包括有空格,那么读取出来的密文将不包括空格,这就造成了解密不正确。如果在SQL里把保存用户密码密文的数据类型设置为char,数据长度设置为30,那么在读取数据库里密文的时候,得到的数据长度是定长30,不足30系统会自动用空格填充,如果把空格截取掉的话,那么密文本身结尾处包含的空格也将被截取,导致解密不正确我目前想到的变通办法就是在数据表里再添加一个字段用来纪录加密后的密文长度
但是这样以来,我以前写的很多代码都需要修改!很麻烦,还有没有更好的办法?
,因为密码是不定长的而且加密后的密文结尾可能存在空格,现在遇到一个问题:如果我在SQL里把保存用户密码密文的数据类型设置为varchar,数据长度设置为30,那么如果加密后的密文结尾包括有空格,那么读取出来的密文将不包括空格,这就造成了解密不正确。如果在SQL里把保存用户密码密文的数据类型设置为char,数据长度设置为30,那么在读取数据库里密文的时候,得到的数据长度是定长30,不足30系统会自动用空格填充,如果把空格截取掉的话,那么密文本身结尾处包含的空格也将被截取,导致解密不正确我目前想到的变通办法就是在数据表里再添加一个字段用来纪录加密后的密文长度
但是这样以来,我以前写的很多代码都需要修改!很麻烦,还有没有更好的办法?
解决方案 »
- 菜鸟跪求问题。。
- build的时候出现的问题
- 为什么渲染各顶点组 移动时会不同步?(DX83D)
- 关于文件合并
- 一道来自爱因斯坦出的测试题,,他说世界上有98%的人回答不出,看看你是否属于另外的2%。我已经做出来了,看看还有没有人做出来,其实很
- 用visual c++2005编译原vc++ 6.0的程序遇到的问题
- vc mfc问题
- VC2005/MFC 我仅仅是更改了对话框上的按钮的ID,结果就出现一个错误!
- 非MFC工程能否通过setting属性转换为基于MFC的工程
- 菜鸟提问:有关用vc读取.res文件数据的问题!急!!!
- 使用"变量名=0"的方式却不能使编辑框中的值变为0,为什么?
- 如何将一个读写数据库的过程封装在一个DLL中
根据你数据库存储格式去掉空格再比较。如果你的算法够复杂的话,输入不同密码,生成的加密后密码只在末尾差几个空格是不大可能的。(有些算法是通过用户名和密码,进行一定变化后生成新密码的,雷同的可能性很小)。呵呵,仅供参考,hope you good luck!
如果用户丢失了密码,是向数据库中写入一个新值,而不是取出旧的告诉他。