我正在尝试从字符串中获取Java密码哈希值,所以我搜索了一下,发现MySQL中的PASSWORD()是如何工作的:SELECT SHA1(UNHEX(SHA1(test)));给出了相同的结果SELECT PASSWORD(test);有了这个,我继续说.我写了一个方法将...
我正在尝试从字符串中获取Java密码哈希值,所以我搜索了一下,发现MySQL中的PASSWORD()是如何工作的:
SELECT SHA1(UNHEX(SHA1('test')));
给出了相同的结果
SELECT PASSWORD('test');
有了这个,我继续说.
我写了一个方法将字符串转换为SHA1 Hash,它完美地工作(测试了几个不同的字符串,获得与MySQL中的SHA1(str)相同的结果)
接下来要做的是UNHEX()方法.我现在卡住了.
我目前的方法:
public static String toMySQLPasswordHash(String str)
{
String hash1 = toSHA1Hash(str);
String unhexedHash1 = new String(DatatypeConverter.parseHexBinary(hash1));
String hash2 = toSHA1Hash(unhexedHash1);
String passwordHash = "*" + hash2.toUpperCase();
return passwordHash;
}
我的“toSHA1Hash”方法:
public static String toSHA1Hash(String str)
{
MessageDigest md = null;
try
{
md = MessageDigest.getInstance("SHA-1");
}
catch (NoSuchAlgorithmException e)
{
Logger.WriteLog(e.toString());
}
if (md == null)
return null;
md.reset();
md.update(str.getBytes());
byte[] byteData = md.digest();
StringBuilder sb = new StringBuilder();
for (byte currByte : byteData)
sb.append(Integer.toString((currByte & 0xff) + 0x100, 16).substring(1));
return sb.toString();
}
我不喜欢使用任何外部软件包,所以请帮助我只使用JDK 1.8.0_40.
解决方法:
我设法通过改变我的toSH1Hash方法得到正确的哈希(感谢Hanno Binder).
我现在使用的方法:
public static String toSHA1Hash(byte[] stringAsBytearray)
{
MessageDigest md = null;
try
{
md = MessageDigest.getInstance("SHA-1");
}
catch (NoSuchAlgorithmException e)
{
Logger.WriteLog(e.toString());
}
if (md == null)
return null;
md.reset();
md.update(stringAsBytearray);
byte[] byteData = md.digest();
StringBuilder sb = new StringBuilder();
for (byte currByte : byteData)
sb.append(Integer.toString((currByte & 0xff) + 0x100, 16).substring(1));
return sb.toString();
}
public static String toSHA1Hash(String str)
{
return toSHA1Hash(str.getBytes());
}
public static String toMySQLPasswordHash(String str)
{
String hash1 = toSHA1Hash(str);
byte[] unhexedHash1 = DatatypeConverter.parseHexBinary(hash1);
String hash2 = toSHA1Hash(unhexedHash1);
String passwordHash = "*" + hash2.toUpperCase();
return passwordHash;
}
沃梦达教程
本文标题为:如何在Java中执行MySQL UNHEX()函数
基础教程推荐
猜你喜欢
- java 工作流引擎设计实现解析流程定义文件 2023-07-15
- SpringBoot整合mybatis/mybatis-plus实现数据持久化的操作 2023-06-23
- Java数据类型转换的示例详解 2023-06-06
- 聊聊Kotlin 中 lateinit 和 lazy 的原理区别 2023-03-21
- 利用Java连接Hadoop进行编程 2023-02-05
- Java Main 函数启动不退出的解决方案 2022-11-08
- java解析多层嵌套json字符串问题 2023-06-06
- Java面试突击为什么要用HTTPS及它的优点 2023-03-07
- Java多线程事务回滚@Transactional失效处理方案 2023-04-06
- 关于JwtToken使用-重点看一下过期时间 2023-02-19