postgresql - 如何使用标准 PostgreSQL 加密字符串?

标签 postgresql uniqueidentifier

我正在使用 PostgreSQL。

我需要将“http://www.xyz.com/some_uri/index1.html”转换为类似“scdfdsffd”的内容(一些唯一键,基于表中唯一键的 URL)。

换句话说...URL 是表中的唯一键,但我需要根据 URL 生成一个小的唯一键。

我可以使用标准 PostgreSQL 8.4 做什么?

最好的问候,

最佳答案

几种方法:

a) 为什么不使用自动递增列或序列生成器为每次插入生成唯一整数?如果您的 URL 少于 1 亿个,则您的标识符很短且易于内存。但是,如果这不是一个选项(例如,因为您不希望人们猜测 ID 并以这种方式攻击数据库):

b) 内置的 MD5() 函数可能会有所帮助:

INSERT INTO table (pkey, url) VALUES (MD5('http://...'), 'http://...');

MD5() 是一个散列函数,很可能会为每个 URL 提供一个唯一标识符。我说“最有可能”是因为您从 MD5 获得了 128 位散列,散列冲突的可能性大约为 2^-128(大约 10^-55)。

如果您需要更小的标识符,您可以将 MD5 的结果减少到更少的字符数,但您可能会显着增加哈希冲突的可能性,具体取决于您采用的字符。

[注意:时间戳答案已编辑,因为它无法解决原始问题。 -BobG]

关于postgresql - 如何使用标准 PostgreSQL 加密字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5736815/

相关文章:

node.js - Node.js:表达路线,从数据库查询数据并在template.hbs View 中呈现

sql - Postgres 触发器检查日期是否与现有记录重叠

sql - SQL 查询中的 uniqueidentifier 显示转换失败错误

sql - 如何生成随机 Base36 ID

ruby-on-rails - Rails 无法使用 NOW() 默认值创建迁移到 Postgres

sql - 添加列以查看

javascript - 我应该如何为一堆对象生成唯一的 ID?

guid - UUID 有多独特?

postgresql - Postgres 通过关系选择所有数据

android - 获取设备的 IMEI 代码或/和 Mac 地址