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

时间:2011-04-20 21:24:09

标签: postgresql uniqueidentifier

我正在使用PostgreSQL。

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

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

标准PostgreSQL 8.4怎么办?

最诚挚的问候,

1 个答案:

答案 0 :(得分:4)

有几种方法:

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

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

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

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

如果您需要较小的标识符,可以将结果从MD5下调到较少的字符数,但根据您所使用的字符,可能会显着增加哈希冲突的可能性。

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