gpt4 book ai didi

java - perl Digest::MD5 md5($data) 和 java MessageDigest.getInstance ("MD5").digest($data) 的输出不同

转载 作者:行者123 更新时间:2023-12-01 11:04:08 26 4
gpt4 key购买 nike

我有一个 perl 脚本,它使用 Digest::MD5 md5($data) 来获取 16 字节摘要(以不可读的形式 - 二进制),并且该摘要用于加密数据。现在我必须在 java 中反转上述过程,即首先我需要使用 MessageDigest.getInstance("MD5").digest($data) 获取 16 字节摘要并解密消息。

Now i am not sure that output digest of perl Digest::MD5 md5($data) and java digest MessageDigest.getInstance("MD5").digest($data) are same or not how do i validate this scenario.

最佳答案

1) 将 byte to hex 转换为 Perl md5

2) 将 Java md5 从字节转换为十六进制 ( examples here )

3)比较输出

这是 MD5 和十六进制转换的 Java 代码:

import java.security.MessageDigest;


public class HelloWorld
{
public static void main(String[] args)
{

System.out.println("Start");

String res=MD5("35799510369");

System.out.print("res:"+res);

}

public static String MD5( String source ) {
try {
MessageDigest md = MessageDigest.getInstance( "MD5" );
byte[] bytes = md.digest( source.getBytes("UTF-8") );
return getString( bytes );
} catch( Exception e ) {
e.printStackTrace();
return null;
}
}//end MD5()

private static String getString( byte[] bytes ) {
StringBuffer sb = new StringBuffer();
for( int i=0; i<bytes.length; i++ )
{
byte b = bytes[ i ];
String hex = Integer.toHexString((int) 0x00FF & b);
if (hex.length() == 1)
{
sb.append("0");
}
sb.append( hex );
}
return sb.toString();
}// end getString()

将之前的代码复制并粘贴到this online compiler中然后按编译并执行;接下来将此输出与 Perl md5 online script 进行比较输出。

<小时/>

对于输入=35799510369

  • Perl 输出:

Md5 摘要为 .S<ë_»X³ëE&â®

摘要的十六进制表示为:012e533c9aeb5f96bb58b3eb4526e2ae

  • Java 输出:

资源:012e533c9aeb5f96bb58b3eb4526e2ae

祝你好运

关于java - perl Digest::MD5 md5($data) 和 java MessageDigest.getInstance ("MD5").digest($data) 的输出不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33118752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com