gpt4 book ai didi

java - BaseX XML 数据库代码

转载 作者:搜寻专家 更新时间:2023-10-30 21:54:27 28 4
gpt4 key购买 nike

我是一名计算机科学专业的学生,​​我们必须在我们的一门类(class)中使用 BaseX(一种纯 Java OSS XML 数据库)。在浏览代码时,我发现了以下代码:

  /**
* Returns a md5 hash.
* @param pw password string
* @return hash
*/
public static String md5(final String pw) {
try {
final MessageDigest md = MessageDigest.getInstance("MD5");
md.update(Token.token(pw));
final TokenBuilder tb = new TokenBuilder();
for(final byte b : md.digest()) {
final int h = b >> 4 & 0x0F;
tb.add((byte) (h + (h > 9 ? 0x57 : 0x30)));
final int l = b & 0x0F;
tb.add((byte) (l + (l > 9 ? 0x57 : 0x30)));
}
return tb.toString();
} catch(final Exception ex) {
Main.notexpected(ex);
return pw;
}
}

(来源:https://svn.uni-konstanz.de/dbis/basex/trunk/basex/src/main/java/org/basex/util/Token.java)

只是出于兴趣:那里发生了什么?为什么这些字节操作在MD5之后呢?文档字符串说它返回一个 MD5 散列……是吗?

最佳答案

我没有查找所用类的定义,但字节操作似乎是将返回的字节数组编码为十六进制字符串。

for(final byte b : md.digest()) {
// get high 4 bytes of current byte
final int h = b >> 4 & 0x0F;
// convert into hex digit (0x30 is '0' while 0x57+10 is 'a')
tb.add((byte) (h + (h > 9 ? 0x57 : 0x30)));
// the same for the bottom 4 bits
final int l = b & 0x0F;
tb.add((byte) (l + (l > 9 ? 0x57 : 0x30)));
}

这是一个很好的例子,说明为什么使用魔数(Magic Number)是不好的。老实说,我不记得 0x57+10 是 'a' 的 ASCII/Unicode 代码点,而没有在 Python 解释器中检查它。

关于java - BaseX XML 数据库代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2966440/

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