解密密码反向ASCII码多个位置

时间:2012-11-05 07:26:46

标签: oracle plsql

如何创建程序a来解密密码反向ASCII码多个位置字符串并用ASCII连接

示例密码:123 加密至:49491005015351

它是这样加密的:

v := v || ASCII(substr(u_pass,i,1)) * instr(u_pass,substr(u_pass,i,1))

1 个答案:

答案 0 :(得分:0)

相反的问题是每个加密字符的长度可能会有所不同。 请注意,下面的算法会查找给出字符的最短序列。可能存在不正确的情况。在这些情况下,此代码将无法解密字符串的其余部分。

v := <encrypted password>;

i := 1;    -- Character
pos := 1;  -- Position in v
while (pos < length(v)) loop
  j=1;
  found = false;
  while not found  and j + pos <= length(v) loop
    if mod(to_number(substr(v, pos, j), i) = 0 then  
      -- Possible match
      anum := to_number(substr(v, pos, j)/ j;  -- ascii value of the next character
      alen := length(trim(to_char(anum)));
      if substr(v, pos + j, alen) = anum then
        -- Match found!
        u_pass := u_pass || chr(anum);
        found := true;
        pos := pos + j + alen;
        i := i + 1;
      end if;
    end if;
  end loop;
end loop;