首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Base32在Java中编码UUID

Base32在Java中编码UUID
EN

Stack Overflow用户
提问于 2014-01-13 23:23:03
回答 3查看 5.6K关注 0票数 3

在Java中创建和编码随机UUID的最有效的方法是什么?我想使用Base32编码来存储在URL中可用的全局唯一ID。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-13 23:42:41

Base32仍然使用=字符,所以如果您真的想要避免=转义,就需要对它做些什么。

如果您真的想避免Base16,我建议您使用Base64而不是Base32。如果要使用RFC标准,请尝试base64url。但是,该标准也使用"=“作为尾随填充,因此您需要转义。它的替代是:

  • + -> -
  • / -> _
  • = -> =

就我个人而言,我使用了一个名为Y64的变体。它的替代是:

  • + -> .
  • / -> _
  • = -> -

这不是一个RFC标准,但至少您不必担心避免尾随"=“。

提供Base64和Base32。下面是一个使用Base64和Y64变量的示例

编码:

代码语言:javascript
复制
UUID uuid = UUID.randomUUID();
ByteBuffer uuidBuffer = ByteBuffer.allocate(16);
LongBuffer longBuffer = uuidBuffer.asLongBuffer();
longBuffer.put(uuid.getMostSignificantBits());
longBuffer.put(uuid.getLeastSignificantBits());
String encoded = new String(Base64.encode(uuidBuffer.array()), 
        Charset.forName("US-ASCII"));
encoded = encoded.replace('+', '.')
        .replace('/', '_')
        .replace('=', '-');

和解码:

代码语言:javascript
复制
String encoded; // from your request parameters or whatever
encoded = encoded.replace('.', '+')
        .replace('_', '/')
        .replace('-', '=');
ByteBuffer uuidBuffer = ByteBuffer.wrap(Base64.decode(
        encoded.getBytes(Charset.forName("US-ASCII"))));
LongBuffer longBuffer = uuidBuffer.asLongBuffer();
UUID uuid = new UUID(longBuffer.get(), longBuffer.get());
票数 5
EN

Stack Overflow用户

发布于 2020-12-27 05:59:09

编解码器Base32Codec可以有效地将UUID编码到基-32。

代码语言:javascript
复制
// Returns a base-32 string
// uuid::: 01234567-89AB-4DEF-A123-456789ABCDEF
// base32: aerukz4jvng67ijdivtytk6n54
String string = Base32Codec.INSTANCE.encode(uuid);

在同一套餐 of uuid-创造者中还有其他编码的编解码器。

票数 1
EN

Stack Overflow用户

发布于 2021-08-23 23:16:15

我同意关于Base64Url可能更合适的讨论,但我也看到了在Base32中产生独特价值的好处。这是不区分大小写,更容易处理,如果涉及到人。

这是我使用番石榴的Base32将UUID转换成BaseEncoding的代码。

代码语言:javascript
复制
    public static String toBase32(UUID uuid){
        ByteBuffer bb = ByteBuffer.wrap(new byte[16]);
        bb.putLong(uuid.getMostSignificantBits());
        bb.putLong(uuid.getLeastSignificantBits());
        return BaseEncoding.base32().omitPadding().encode(bb.array());
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21103363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档