PostgreSQL 密码生成器

Posted

技术标签:

【中文标题】PostgreSQL 密码生成器【英文标题】:PostgreSQL password generator 【发布时间】:2016-09-19 14:15:03 【问题描述】:

我需要一些关于 sql pass 生成器的帮助。我已经有一个返回 8 个随机字符的函数,但我必须确定,有小写和大写字符和数字。有什么建议吗?这是我的旧函数。

CREATE FUNCTION f_generate_password() RETURNS text AS $$
DECLARE
   password text;
   chars text;
BEGIN
   password := '';
   chars := 
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
   FOR i IN 1..8 LOOP
     password := password || SUBSTRING(chars, 
ceil(random()*LENGTH(chars))::integer, 1);
   END LOOP;
   return password;
END;
$$
LANGUAGE plpgsql;

【问题讨论】:

【参考方案1】:

如果您想知道算法...我不知道 PostgreSQL 语法/方言,但您可以例如:

1) 选择 3 个 random 位置(1 到 8)并在其中放置 3 个 random 小写字母 2) 选择 3 个 random 位置(从其余位置中)并在其中放置 3 个 random 大写字母 3) 将 2 个 random 数字放在其余两个位置。

【讨论】:

是的,我知道,我只是想要 SQL 语法中的那个 :) 但我已经做到了...我在这里粘贴代码只是为了帮助其他有同样问题的人 :)【参考方案2】:

这里有一个相同或相似问题的解决方案:)

CREATE OR REPLACE FUNCTION f_generate_password()
  RETURNS text AS
$BODY$
DECLARE
   vPassword text;
   chars text;
BEGIN
   vPassword := ''; 
   chars := 
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  WHILE((select COALESCE(substring(vPassword from '.*[a-z]+.*'),'')) = '' OR (select COALESCE(substring(vPassword from '.*[A-Z]+.*'),'')) = '' OR (select COALESCE(substring(vPassword from '.*[0-9]+.*'),'')) = '') LOOP
  vPassword := '';
   FOR i IN 1..8 LOOP
     vPassword := vPassword || SUBSTRING(chars, ceil(random()*LENGTH(chars))::integer, 1);
  END LOOP;
   END LOOP;
   return vPassword;
END;
$BODY$
  LANGUAGE plpgsql;

【讨论】:

以上是关于PostgreSQL 密码生成器的主要内容,如果未能解决你的问题,请参考以下文章

Hashcat 生成密码字典

有没有办法告诉 Chrome 密码生成器网站密码政策?

mkpasswd密码随机生成器

PowerShell脚本:随机密码生成器

搜狗笔试题——密码生成

C语言实现密码字典生成器