如何在PostgreSQL中将字节数组编码为base32

时间:2018-12-20 10:07:33

标签: postgresql

我有一个Java应用程序,它通过将随机密码字节编码为base32(RFC4648)来生成主键的ID。

如何通过SQL脚本对PostgreSQL进行同样的操作?

gen_random_bytes似乎可以完成生成随机字节的工作,但是似乎没有可用的方法将它们编码为base32。

2 个答案:

答案 0 :(得分:2)

几年前,我搜索了这个确切的问题,并最终构建了一个带有函数的纯plpgsql模式,并认为如果有人遇到它,我会把它留在这里。

此视频和RFC的信用 https://www.youtube.com/watch?v=Va8FLD-iuTg https://tools.ietf.org/html/rfc4648

这是扩展名https://github.com/pyramation/base32/blob/master/packages/base32/sql/launchql-base32--0.0.1.sql

一旦安装,就可以完成

select base32.encode('foo');
-- MZXW6===


select base32.decode('MZXW6===');
-- foo

答案 1 :(得分:-1)

当前Postgres的encode函数不支持Base32:

  

将二进制数据编码为文本表示形式。支持的格式   分别是:base64,hex,escape。转义转换零字节和高位设置   字节到八进制序列(\ nnn),并将反斜杠加倍。

https://www.postgresql.org/docs/11/functions-string.html

但是有一些针对此功能的外部扩展。