将单词转换为ascii并返回单词添加一些值

时间:2015-04-19 04:07:16

标签: oracle plsql ascii

我正在研究PL / SQL。开发人员设置的oracle密码是这样设置的

=> input word => converted to ascii => added 2 to each letter => converted back to word

例如:输入密码为" admin"。 admin分为字符/字母(a,d,m,i,n) 转换为ascii并添加2并再次转换为单词

a=97      97+2 = 99 = c
d=100     100+2=102 = f
m=109     109+2=111 = o
i=105     105+2=107 = k 
n=110     110+2=112 = p

我做的是

$pass=str_split('admin');

    foreach($pass as $password){
        $new_password[]=chr(ord($password)+2);
    }
$final= $new_password[0].$new_password[1].$new_password[2].$new_password[3].$new_password[4]; //the values 0-4 is set manually
echo $final;

结果: cfokp

但是我无法在命令中运行结果字符串并将oracle密码与检索到的密码相匹配。

2 个答案:

答案 0 :(得分:2)

SQL 中的另一种方法是拆分字符,将ascii值加2,然后聚合字符串。

当然,它不会比TRANSLATE方法更快。但是,对于一组或一小组价值观而言,它并不重要。

例如,

SQL> WITH data AS
  2    (SELECT 'admin' str FROM dual
  3    )
  4  SELECT str, LISTAGG(CHR(ASCII(REGEXP_SUBSTR(str, '\w', 1, LEVEL)) + 2), '') WITHIN GROUP(
  5  ORDER BY LEVEL) str_new
  6  FROM data
  7    CONNECT BY LEVEL <= LENGTH(str)
  8  /

STR    STR_NEW
------ -------
admin  cfokp

SQL>

以上 SQL 执行以下重要任务:

  • 使用 REGEXP_SUBSTR ROW GENERATOR 技术将字符串拆分为字符
  • 将值2添加到每个字符的ascii值。
  • 将修改后的 ascii 转换回字符
  • 使用 LISTAGG
  • 汇总字符串

答案 1 :(得分:1)

使用translate

可能更容易
select translate('admin',
                 'abcdefghijklmnopqrstuvwxyz',
                 'cdefghijklmnopqrstuvwxyzab'
                )
from dual;

我不确定你想要做什么&#34; y&#34;和&#34; z&#34;。这将它们映射回&#34; a&#34;和&#34; b&#34;。如果需要,您可以将其扩展为大写字母和其他字符。