Oracle数据库替代加密算法

2014-11-24 17:45:00 · 作者: · 浏览: 0

  替代密码算法的原理是使用替代法进行加密,就是将明文中的字符用其它字符替代 后形成密文。例如:明文字母a、b、c、d ,用D、E、F、G做对应替换后形成密文。


  1.--------------------------------


  2.--------------------------------


  3.--Oracle数据库加密----替代算法---


  4.--http://nileader.blog.51cto.com


  5.--------------------------------


  6.CREATE OR REPLACE PROCEDURE pro_insert(


  7. uName IN scott.users.uname%TYPE, --用户名


  8. uPwd IN scott.users.upwd%TYPE --密码,这个要加密


  9.) IS


  10.BEGIN


  11.


  12.--定义变量


  13.DECLARE


  14. insertSQL nvarchar2(200 ); --一个待构造的sql语句


  15. key numeric(2); --密钥


  16. totalLetter numeric(2); --字母的总个数


  17. targetCode nvarchar2(15); --转化后的字符密码表示


  18. lengthUpwd numeric(2); --密码长度


  19. initCodeva l numeric(3); --原始密码每位上字符对应的数值


  20. targetCodeva l numeric(3);


  21. BEGIN


  22.


  23. key := 3; --密钥赋值


  24. totalLetter := 26; --字母总数


  25. targetCode := ''; --转化后的字符


  26.


  27.


  28. --获取初始密钥的长度


  29. lengthUpwd := LENGTH(uPwd);


  30.


  31. --逐个对初始密钥进行加密


  32. FOR i IN 1..lengthUpwd


  33. LOOP


  34.


  35. initCodeva l := ASCII(SUBSTR(uPwd,i,1) ) -96 ;


  36. --如果替代后的字母超过了z


  37. targetCodeva l := MOD((initCodeva l + key), totalLetter );


  38.


  39. --如果是字母z


  40. IF targetCodeva l = 0 THEN


  41. targetCodeva l := 26;


  42. END IF;


  43.


  44. targetCodeva l := targetCodeva l + 96;


  45.


  46. --将加密后的字符拼装


  47. targetCode := targetCode || CHR(targetCodeva l);


  48. END LOOP;


  49.


  50. --构造一个sql语句


  51. insertSQL := 'INSERT INTO users (uName, uPwd ) VALUES('''


  52. ||uName||''','''||targetCode||''')';


  53. EXECUTE IMMEDIATE TO_CHAR(insertSQL);


  54.


  55. END;


  56.END pro_insert;