Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MD5,如何将任何数字字符串转换为字节_Java_Md5 - Fatal编程技术网

Java MD5,如何将任何数字字符串转换为字节

Java MD5,如何将任何数字字符串转换为字节,java,md5,Java,Md5,我有一个关于MD5的问题,以及我如何设置一个任意数字的字符串以创建如下内容: private static final String VALID_MD5 = "DF3AEBC649F9E3B674EEB790A4DA224E"; 这是为了使字符串编号实际上是6357而设置的。我将如何设置它以获取我想要的任何4位数字。以下是模拟安全系统的完整代码,供参考。(请注意,我知道MD5并不完全安全。): //导入消息摘要,单向散列函数,用于获取数据并输出固定散列值 //请注意,这在技术上是不安全的,像

我有一个关于MD5的问题,以及我如何设置一个任意数字的字符串以创建如下内容:

 private static final String VALID_MD5 = "DF3AEBC649F9E3B674EEB790A4DA224E";
这是为了使字符串编号实际上是6357而设置的。我将如何设置它以获取我想要的任何4位数字。以下是模拟安全系统的完整代码,供参考。(请注意,我知道MD5并不完全安全。):

//导入消息摘要,单向散列函数,用于获取数据并输出固定散列值
//请注意,这在技术上是不安全的,像大多数东西一样可以用蛮力破解,但由于这是一个示例,不会投入实际使用,因此这是一种制作“模拟”安全系统的简单方法
导入java.security.MessageDigest;
//导入扫描仪供用户输入自己的号码
导入java.util.Scanner;
//名为pin的新类
公共类pin码
{
公共静态void main(字符串[]args)
{
if(Login.Login())
{
//故意将类留空,这是成功激活正确pin后执行的代码所在的位置
}
}
}
//一个新的特定于login的独立类
类登录
{
//私有即时变量
private static final Scanner ONE=new Scanner(System.in);//创建一个新的扫描仪并调用它
private static final String VALID_MD5=“DF3AEBC649F9E3B674EEB790A4DA224E”//指插脚6357,传递给MD5方法的插脚字符串返回16个看似随机的字节数组,以便转换为32个字符的十六进制字符串进行存储和比较
//使用布尔值表示真或假等
公共静态布尔登录()
{
System.out.print(“输入pin:”;//使用UTI扫描仪输入pin
字符串pin=ONE.nextLine();//转到下一行
if(isValid(pin)&&VALID_MD5.equals(md5hextstring(pin))//如果字符串有效(请参阅下面的布尔值),并且VALID_MD%等于hextstring(pin),请执行以下语句
{
//打印并在pin匹配时返回true
System.out.println(“登录成功”);
返回true;
}
//打印输出,如果pin不匹配,则返回false
System.out.println(“登录失败,pin无效”);
返回false;
}
//返回字符串s在4位长度的情况下是否有效,使用boolena表示true或false
私有静态布尔值有效(字符串s)
{
返回s.matches(“\\d{4}”);//通过扫描仪输入的pin必须为4位
}
//字符串md5HexString是字符串s
私有静态字符串md5HexString(字符串s)
{
返回到HexString(md5(s));//返回到HexString
}
//字节
专用静态字节[]md5(字符串s)
{
尝试
{
MessageDigest md=MessageDigest.getInstance(“MD5”);//获取md的实例,MD5
byte[]buf=s.getBytes();//获取字节
md.update(buf,0,buf.length);
return md.digest();//return
}
catch(Exception-ex)//使用catch-Exception-ex而不是catch-Exception,允许访问异常类(error-cause)实例进行重试
{
返回新字节[16];
}
}
私有静态字符串到HexString(字节[]byteArray)
{
最终字符串HEX_CHARS=“0123456789ABCDEF”;//16
字节[]结果=新字节[byteArray.length>4;//高4位,0-15
//填充两个ASCII字符,一个高4位,另一个低4位,十六进制的高半字节和低半字节,半字节或十六进制数字,用于表示单个十六进制数字
结果[i*2]=(字节)十六进制字符(hi4);
结果[i*2+1]=(字节)十六进制字符(lo4);
}
返回新字符串(结果);//将结果转换为字符串
}
}

MD5和是从字符串输入生成的
6357

$ echo -n 6357 | md5sum
df3aebc649f9e3b674eeb790a4da224e  -
如果要检查用户是否输入了不同的四位数字,请计算此数字的MD5总和并更改代码。如果要检查是否输入了
1234
,请预先计算
1234

$ echo -n 1234 | md5sum
81dc9bdb52d04dc20036dbd8313ed055  -
并更改您的代码:

private static final String VALID_MD5 = "81dc9bdb52d04dc20036dbd8313ed055";

有关MD5的信息可从中获得。

MD5不“代表”任何东西,它都是一个散列算法。“这是设置为字符串数字实际上是6357”为什么?@LutzHorn我猜代表不是最好的选择,我只是想知道我如何设置它来吸收任何数字我希望好,谢谢你,比我想象的简单得多,谢谢你的链接。
private static final String VALID_MD5 = "81dc9bdb52d04dc20036dbd8313ed055";