2012-11-05 87 views
-1

如何創建過程的解密密碼反向ASCII代碼的多個位置炭和級聯與ASCII解密密碼相反ASCII代碼的多個位置

例如密碼:123 加密以:49491005015351

它加密像這樣:

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

這不是一個很好的加密算法。不要編寫自己的加密算法。使用[dbms_crypto]中的內置函數(http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_crypto.htm)(這不是建議,您需要決定哪種方法最適合您。 ) – Ben

+0

此外,你的「加密」似乎是循環完成的。沒有所有細節的人都不可能進行逆向工程。 – Ben

+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;