Oracle 密码反向到ASCII码多位置的解密

Oracle 密码反向到ASCII码多位置的解密,oracle,plsql,Oracle,Plsql,如何创建一个过程来解密密码反向ASCII码多位置字符并与ASCII连接 密码示例:123 加密至:49491005015351 它是这样加密的: v := v || ASCII(substr(u_pass,i,1)) * instr(u_pass,substr(u_pass,i,1)) 反过来的问题是,每个加密字符的长度可能不同。 请注意,下面的算法查找给定字符的最短序列。在某些情况下,这可能是不正确的。在这些情况下,此代码将无法解密字符串的其余部分 v := <encrypted pa

如何创建一个过程来解密密码反向ASCII码多位置字符并与ASCII连接

密码示例:123 加密至:49491005015351

它是这样加密的:

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

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

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;
v:=;
i:=1;——性格
位置:=1;——在v中的位置
while(pos虽然没有找到和j+pos,但这不是一个很好的加密算法。不要编写自己的加密算法。使用中内置的(这不是建议。你需要决定什么对你最合适。)此外,你的“加密”似乎是在循环中完成的。如果没有所有细节,任何人都不可能进行反向工程。此外,密码算法通常不是为解密而设计的——您对提交的密码进行加密,然后查看结果是否与存储的密码加密匹配。