将 word 转换为 ascii 并将 return 转换为添加一些值的 word
convert word to ascii and return to word adding some value
我正在研究 PL/SQL。开发者的oracle密码是这样设置的
=> input word => converted to ascii => added 2 to each letter => converted back to word
例如:输入的密码是"admin"。
admin 被拆分为 characters/letters (a, d, m, i, n)
转换为 ascii 并加 2 并再次转换为 word
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 密码与检索到的密码相匹配。
使用 translate
可能更容易做到:
select translate('admin',
'abcdefghijklmnopqrstuvwxyz',
'cdefghijklmnopqrstuvwxyzab'
)
from dual;
我不确定你想用 "y" 和 "z" 做什么。这会将它们映射回 "a" 和 "b"。如果需要,您可以将其扩展为大写字母和其他字符。
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
聚合字符串
我正在研究 PL/SQL。开发者的oracle密码是这样设置的
=> input word => converted to ascii => added 2 to each letter => converted back to word
例如:输入的密码是"admin"。 admin 被拆分为 characters/letters (a, d, m, i, n) 转换为 ascii 并加 2 并再次转换为 word
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 密码与检索到的密码相匹配。
使用 translate
可能更容易做到:
select translate('admin',
'abcdefghijklmnopqrstuvwxyz',
'cdefghijklmnopqrstuvwxyzab'
)
from dual;
我不确定你想用 "y" 和 "z" 做什么。这会将它们映射回 "a" 和 "b"。如果需要,您可以将其扩展为大写字母和其他字符。
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 聚合字符串