我正在研究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密码与检索到的密码相匹配。
答案 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 执行以下重要任务:
答案 1 :(得分:1)
使用translate
:
select translate('admin',
'abcdefghijklmnopqrstuvwxyz',
'cdefghijklmnopqrstuvwxyzab'
)
from dual;
我不确定你想要做什么&#34; y&#34;和&#34; z&#34;。这将它们映射回&#34; a&#34;和&#34; b&#34;。如果需要,您可以将其扩展为大写字母和其他字符。