【发布时间】:2020-02-26 23:37:13
【问题描述】:
如何将 Guid.ToByteArray() 的以下 .net 用法转换为 Java?
var g= Guid.Parse("9836f2b9-ba8c-42a6-b884-2e9eed9fb95a");
var ga = g.ToByteArray();
.Net Byte 数组返回
ga= [185,242,54,152,140,186,166,66,184,132,46,158,237,159,185,90]
Java 中的尝试(与 .Net 数组不匹配)
UUID uuid = UUID.fromString("9836f2b9-ba8c-42a6-b884-2e9eed9fb95a");
ByteBuffer bb = ByteBuffer.wrap(new byte[16]);
bb.putLong(uuid.getMostSignificantBits());
bb.putLong(uuid.getLeastSignificantBits());
byte[] ga= bb.array();
返回的 Java 字节数组
ga= [-72,-124,46,-98,-19,-97,-71,90,-104,54,-14,-71,-70,-116,66,-90]
更新了Guid to Base64 in Java的解决方案
UUID uuid = UUID.fromString("9836f2b9-ba8c-42a6-b884-2e9eed9fb95a");
ByteBuffer bb = ByteBuffer.wrap(new byte[16]);
bb.putLong(uuid.getMostSignificantBits());
bb.putLong(uuid.getLeastSignificantBits());
byte[] uuid_bytes = bb.array();
byte[] guid_bytes = Arrays.copyOf(uuid_bytes,uuid_bytes.length);
guid_bytes[0] = uuid_bytes[3];
guid_bytes[1] = uuid_bytes[2];
guid_bytes[2] = uuid_bytes[1];
guid_bytes[3] = uuid_bytes[0];
guid_bytes[4] = uuid_bytes[5];
guid_bytes[5] = uuid_bytes[4];
guid_bytes[6] = uuid_bytes[7];
guid_bytes[7] = uuid_bytes[6];
byte[] ga= guid_bytes;
【问题讨论】:
-
谢谢,但我今天尝试了这些方法,但字节数组字节不匹配。请参阅上面的更新。我应该在之前展示过这个=)我确定这是我需要改变的愚蠢的东西。字节必须匹配才能创建 SecretKeySpec 来解密我传入的一些 .Net AES 加密数据。
-
我希望有办法解决这个问题,因为我无法控制需要在 Java 端生成密钥的 .net AES 加密端 =)
-
我刚刚找到了一个解决方案,它可以在这里工作stackoverflow.com/questions/51609674/guid-to-base64-in-java。字节顺序是一团糟。我永远不会想到这一点=)我将更新上面的问题以添加解决方案。感谢您的帮助。