实在不知道为什么,测试用例都通过了,但是用网页输入就不行

实在不知道为什么,测试用例都通过了,但是用网页输入就不行

http://img1.sycdn.imooc.com//climg/5f586aee090e355314460391.jpg

http://img1.sycdn.imooc.com//climg/5f586b19090ed71c13920367.jpg


图1 是Tomcat调试step into看md5Digest

图2 是用测试用测试md5Digest


问题是明明输入的两个参数一模一样,都是123456作为password, 1234最作为salt

而且从调试来看,加盐以后的字符串也一样,就是调用md5Hex这一步,得出的md5却不一样

请问这是为什么?该如何解决

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

6回答
pleine 2021-05-04 10:56:30

我在OA系统哪里也有这个问题,代码完全正确,错误原因是pom里面引入的

commons-codec 版本不一样。和老师视频一样应该可以的。
Popeye_Popi 2020-11-12 17:42:30

你好,我跟你的问题一样,请问解决了吗?如何解决的?我新建了项目也不行

好帮手慕阿满 2020-09-11 16:33:32

同学你好,打印?是正常的,这边启动项目输出到控制台也是?,如:

http://img1.sycdn.imooc.com//climg/5f5b352a09f5123901660347.jpg

建议同学新建一个项目,重新测试再试试。

祝:学习愉快~

好帮手慕阿满 2020-09-11 11:05:24

同学你好,在问题的截图中,有看到tomcat启动执行程序,@Test测试用例执行程序,获取到target都是ԃԄԅԆԇԈ,如:

http://img1.sycdn.imooc.com//climg/5f5ae73009ed144f12450243.jpghttp://img1.sycdn.imooc.com//climg/5f5ae74009b071f911100192.jpg

但是在执行DigestUtils.md5Hex(target)时获取到的结果不同。

这边测试并没有出现同学这种情况,很奇怪。建议同学重新创建一个项目再试试。

祝:学习愉快~

  • 提问者 weixin_慕勒4393907 #1
    public static String md5Digest(String source, Integer salt) { char[] ca = source.toCharArray(); for (int i = 0; i < ca.length; i++) { System.out.println(ca[i]); ca[i] = (char) ((int)ca[i] + salt); System.out.println("c: "+ca[i]); } String target = new String(ca); String md5 = DigestUtils.md5Hex(target); System.out.println("password: " + source); System.out.println("salt: " + salt); System.out.println("target: "+target); System.out.println("md5: "+md5); return md5; } 我后来在方法内部书写了打印的语句用于排查问题 后来发现即使在调试中显示的是ԃԄԅԆԇԈ,实际打印的target是6个? 问题就是在ca[i] = (char) ((int)ca[i] + salt); 这一句使得ca[i]变为了?
    2020-09-11 13:05:56
好帮手慕阿慧 2020-09-09 19:10:37

同学你好,加盐以后输出6个?是没有问题的。

1、同学检查一下项目启动时访问的MD5Utils类和测试的MD5Utils类是否是同一个类。

2、同学检查一下MD5Utils类中导入的DigestUtils包是否正确。如下:

http://img1.sycdn.imooc.com//climg/5f58b82a09c8b8cb05460342.jpg

祝学习愉快~

  • 提问者 weixin_慕勒4393907 #1
    绝对调用的是同一个类,从调试的截图就可以看出,进入的是同一个方法 如果是项目启动访问,加盐得到的是6个?,测试用例得到的是ԃԄԅԆԇԈ 也就是说在项目启动访问状态下,(char)ca[i]+salt的结果是? 请老师帮忙看一下,问题就出在这一步,跟浏览器缓存,idea缓存,方法调用,参数输入,都没有关系
    2020-09-10 20:30:22
好帮手慕阿慧 2020-09-09 17:00:48

同学你好,老师这边测试结果都是319f25b32fd538728736a46392e89593。可能是缓存的原因,建议同学换个浏览器,重启Tomcat或者关闭IDEA,重新打开再试试。

祝学习愉快~

  • 提问者 weixin_慕勒4393907 #1
    老师我尝试了如下操作都没有用, 1 清空浏览器缓存 2 换浏览器 3 清空idea缓存并重启 4 clean 工程 5 删除 out目录,重启tomcat 而且我发现,只要启动tomcat,然后从浏览器注册用户,最后md5加密的值就是和测试用例中的不一样 请问老师能不能再帮我想一下是什么问题,网上实在查不到原因
    2020-09-09 18:20:41
  • 提问者 weixin_慕勒4393907 #2
    而且我发现,启动服务器后,不管输入什么字符串,md5的值都是图1 中的,但是在测试用例中,得到的md5都是正确的,这一点能不能帮助判断?
    2020-09-09 18:27:27
  • 提问者 weixin_慕勒4393907 #3
    现在发现的是, 在tomcat运行时输入的密码 ca[i] = (char) (ca[i] + salt); 在经过这一步加盐以后,所有char都变成了?所以最终md5是错误的,且输入任何6位字符串都是相同的“??????” 但是在测试用例中就不会这样
    2020-09-09 18:44:07
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师