java - 选择sha256解密和md5转换postgresql和java
问题描述
下午好,我需要将 UUID 转换为 sha256,然后再转换为 md5,在 java 中它可以工作,但如果我通过 pgadmin(postgres) 1 字符不同
在java中
public class outro {
public static void main(String[] args) {
String prontuarioBaseUUID = "a1d347fc-094f-49de-91b9-f2765c58b94d";
System.out.println(uuidSha2Encrypt(prontuarioBaseUUID));
}
public static String uuidSha2Encrypt(String uuid) {
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(uuid.getBytes());
return UUID.nameUUIDFromBytes(md.digest()).toString();
} catch (NoSuchAlgorithmException ns) {
throw new RuntimeException("Algoritmo SHA-256 não disponível", ns);
}
}
结果d5fabb45-dbd1-399b-a6c1-515367b8a2d4
在 pgadmin postgres
从 tb_paciente 中选择 uuid_in(md5(digest('a1d347fc-094f-49de-91b9-f2765c58b94d', 'sha256'))::cstring)
结果d5fabb45-dbd1-b99b-a6c1-515367b8a2d4
什么是问题?谢谢
- d5fabb45-dbd1-399b - a6c1-515367b8a2d4
- d5fabb45-dbd1-b99b - a6c1-515367b8a2d4
解决方案
您的 Java 方法存在问题,因为它不包含 UUID v3 所需的命名空间。在调用之前,您需要在名称前面加上名称空间UUID.nameUUIDFromBytes
:
private static final UUID NAMESPACE = UUID.fromString("00000000-0000-0000-0000-000000000000");
public static void main(String[] args) {
// Charset should match SERVER_ENCODING
System.out.println(uuidV3(NAMESPACE, "test".getBytes(StandardCharsets.UTF_8)));
}
public static UUID uuidV3(UUID namespace, byte[] name) {
byte[] ns = toBytes(namespace);
byte[] nsAndName = concatenate(ns, name);
return UUID.nameUUIDFromBytes(nsAndName);
}
public static byte[] concatenate(byte[] a, byte[] b) {
byte[] result = new byte[a.length + b.length];
System.arraycopy(a, 0, result, 0, a.length);
System.arraycopy(b, 0, result, a.length, b.length);
return result;
}
public static byte[] toBytes(UUID uuid) {
ByteBuffer buffer = ByteBuffer.wrap(new byte[16]);
buffer.putLong(uuid.getMostSignificantBits());
buffer.putLong(uuid.getLeastSignificantBits());
return buffer.array();
}
我在上面的例子中使用了 nil 命名空间,但它可以是任何东西。
上面的测试打印
96e17d7a-ac89-38cf-95e1-bf5098da34e1
这与等效的 postgres 查询的输出相匹配:
select uuid_generate_v3(uuid_nil(), 'test');
推荐阅读
- java - 如何在eclipse中更改源
- python-3.x - 我已将 PDF 转换为文本,我现在正在尝试删除不需要的文本,然后重新组合在一起以创建 csv
- amazon-web-services - AWS lambda 函数超时
- amazon-web-services - 持续将 Amazon RDS 同步到 Amazon S3
- algorithm - 是否可以反转双循环链表?如果是,那么如何?
- macos - 如何使用 github 操作在 OS X 和 Windows 上编译二进制文件?
- jmeter - 如何按顺序执行运行多个 JMeter 线程的请求
- counter - 希望计数器仅在视口中开始计数
- r - 将文本转换为 r 中的行
- python - 'from modulename import function/variable' 是否将整个模块放入 sys 模块字典中?