原先已经有asp的md5加密函数,现在有另一个用java写的md5算法,只要是非双字节字符,两者加密结果一样,正确,但当有双字节字符,如中文时,用asp和java写的md5加密算法产生的结果不一样,请问为什么?有什么解决方案?谢谢。现在必须要讲ASP的加密算法将错就错,也就是说JAVA加密结果必须符合ASP加密结果。
测试结果:
我是谁(ASP):8847323f155a0761
我是谁(JAVA):a34c6ecc60eacc5f
--------------------------------------------
eN12(ASP):e910773b6ce95504
eN12(JAVA):e910773b6ce95504
--------------------------------------------
cc(ASP):39add2978bf5b495
cc(JAVA):39add2978bf5b495

解决方案 »

  1.   

    好像是取的中间8字节。
    我的算法你下面2个都对得上,可是跟你上面的JAVA/ASP都对不上!
      

  2.   

    MD5 是对 "字节串" 的操作,而不是对 "字符串" 的操作。如果搂主想要 MD5(中文) 结果一致的话,你需要选择一致的编码进行转化成 "字节串",后再进行 MD5 操作。推荐搂主文章,了解其中的原理:
    http://www.regexlab.com/zh/encoding.htm在搂主了解了原理之后,建议搂主使用 utf8 编码
      

  3.   

    自己解决了,但不是最好的方案,我的方案是直接把asp写的md5拷贝到vb6.0下的activex dll中,然后编译成md5.dll,然后java中利用jacob中间件与VB编写的com进行通信,更详细的可以访问我的个人主页:http://cxlh.blogcn.com,代码如下:
        ActiveXComponent pp = new ActiveXComponent("md5.Class1");
        try {
         Dispatch myCom = (Dispatch) pp.getObject(); //生成一个对象
         Variant result = Dispatch.call( myCom, "MD5", "我是谁") ;
    System.out.println(result.toString());
        } catch (Exception e) {
          e.printStackTrace();
        }
      

  4.   

    问题是解决了,不过不知道搂主有没有搞明白之前 "不一致" 的原因?http://www.regexlab.com/zh/encoding.htm