使用手动输入一个密码和文件读取的密码加密后值不一样
前几天,写了个模拟登陆的脚本,然后经过手动输入账号密码进行登陆,其中有一个设计md5加密的算法,我发现如果用 raw_input()函数进行输入,然后加密的密文是正确的,但是如果从文件读取,然后同样的字符,加密完> 后就和以前不一致,所以,就导致登陆时时不成功,还是同样的手法,分析问题出在什么地方,然后确实是加密出了问题。
因为以前没深入接触过这一点,所以解决问题的思路绕了不少圈子。
首先,我第一时间想到的就是编码问题,我在想ide是否自动进行了编码转换,然后才输出到用户屏幕上,然后md5加密的是以前的编码数据,所以导致加密后的密文和以前手动输入的字符串进行加密的密文不同,然后就修改了
自己电脑的编码,修改了ide的编码,让它们保持一致。
但是,我失败了,我改完所有东西还是不行,接下来就要考验眼力的时候了,还记得,去年初学C语言的时候,帮别人找bug,找了很久才找出来,基本是一次又一次对比,一次又一次调试,最可气的是因为 那个错误是在for循
环后面加了一个分号,所以导入程序逻辑不对,所以结果一直不正确,这样的错误往往很难发现,养成良好的编程习惯很重要。
昨天找了大约两个小时,发现因为从文本读出来的东西,我是一次读一行,用的readline()函数,然后它会默认把换行符也读进去,就是’\n’
所以后来我进行print输出字符串的时候会发现字符串没有问题,却忽略了’\n’
最后,我把’\n’用replace(’\n’,’’)进行替换了之后,再查看md5加密后,发现加密结果正确。
从这个事例可以总结,在处理字符串的时候,一定要仔细,否则会发生很多意想不到的错误。