【问题标题】:convert word to ascii and return to word adding some value将 word 转换为 ascii 并返回 word 添加一些值
【发布时间】:2015-04-19 04:07:16
【问题描述】:

我正在研究 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并再次转换为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 密码与检索到的密码匹配。

【问题讨论】:

  • 如果你想要 php 解决方案,为什么要标记这个 oracle plsql?

标签: oracle plsql ascii


【解决方案1】:

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_SUBSTRROW GENERATOR 技术将字符串拆分为字符
  • 将值 2 添加到每个字符的 ascii 值。
  • 将修改后的 ascii 转换回 characters
  • 使用 LISTAGG 聚合字符串

【讨论】:

  • 非常感谢 Lalit Kumar B 的回答,但是您能否将用户输入密码为“admin”的 php 代码粘贴到与 oracle 密码 cfokp 匹配的位置。如果您能多加一点帮助,我将不胜感激
  • 我看到你有你的 PHP 代码(虽然我不知道 PHP),我只能用 Oracle 来帮助你。因此,您拥有将密码转换为 Oracle 密码的 PHP 代码和 Oracle SQL 这两部分。现在你在哪里找到差距?你需要PHP代码来比较两者吗?
【解决方案2】:

使用translate 可能更容易做到这一点:

select translate('admin',
                 'abcdefghijklmnopqrstuvwxyz',
                 'cdefghijklmnopqrstuvwxyzab'
                )
from dual;

我不确定你想用“y”和“z”做什么。这会将它们映射回“a”和“b”。如果需要,您可以将其扩展到大写字母和其他字符。

【讨论】:

  • 对不起,你没有明白我的意思。如何将单词(普通单词或 alpa 数字字符)转换为 ascii 并将每个值加 2 并使用 php 将其转换回单词
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-20
  • 2011-04-10
  • 1970-01-01
  • 2016-02-21
  • 2016-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多