在mysql5中用儲存過程或函式實現加密

2021-04-14 13:05:50 字數 2969 閱讀 5831

下面2個例子,提供了一種字串加密的演算法,每次以相同的入參呼叫都會得到不同的加密結果,

演算法相對比較簡單,不具備強度。分別以函式和過程的形式分別實現如下:

(1)函式

eg:create function fun_addmm(inpass varchar(10)) returns varchar(11)

begin

declare string_in varchar(39);

declare string_out varchar(78);

declare offset tinyint(2);

declare outpass varchar(30) default ';

declare len tinyint;

/*declare i tinyint;*/

/**/

set len=length(inpass);

if((len<=0) or (len>10)) then

return "";

end if;

set offset=(second(now()) mod 39)+1; /*根據秒數取模*/

/*insert into  testtb values(offset,'offset: ');*/

set string_out='yn8k1jozvurb3mdets5gpl27axwihq94c6f0#$_';  /*金鑰*/

set string_in='_$#abcdefghijklmnopqrstuvwxyz0123456789';

set outpass=concat(outpass,substring(string_out,offset,1));

/*     insert into  testtb values(2,outpass);*/

set string_out=concat(string_out,string_out);

set @i=0;

repeat

set @i=@i+1;

set outpass=concat(outpass,substr(string_out,instr(string_in,substring(inpass,@i,1))+offset,1));

/*       insert into  testtb values(@i+2,outpass);*/

until (@i>=len)

end repeat;

return outpass;

end 

(2)過程

create procedure `pro_addmm`(in inpass varchar(10),out outpass varchar(11))

begin

declare string_in varchar(39);

declare string_out varchar(78);

declare offset tinyint(2);                

declare len tinyint;

set outpass=';

set len=length(inpass);

if((len<=0) or (len>10)) then

set outpass=';

else

set offset=(second(now()) mod 39)+1;

set string_out='yn8k1jozvurb3mdets5gpl27axwihq94c6f0#$_';

set string_in='_$#abcdefghijklmnopqrstuvwxyz0123456789';

set outpass=concat(outpass,substring(string_out,offset,1));

set string_out=concat(string_out,string_out);

set @i=0;

repeat

set @i=@i+1;

set outpass=concat(outpass,substr(string_out,instr(string_in,substring(inpass,@i,1))+offset,1));

until (@i>=len)

end repeat;

end if;

end//

執行結果如下:

mysql> call pro_addmm('zhouys',@a);

query ok, 0 rows affected (0.00 sec)

mysql> select @a;

+---------+

| @a      |

+---------+

| u_pi6$4 |

+---------+

1 row in set (0.00 sec)

mysql> call pro_addmm('zhouys',@a);

query ok, 0 rows affected (0.00 sec)

mysql> select @a;

+---------+

| @a      |

+---------+

| 9p8uegm |

+---------+

1 row in set (0.00 sec)

mysql> select fun_submm('u_pi6$4');

+----------------------+

| fun_submm('u_pi6$4') |

+----------------------+

| zhouys               |

+----------------------+

1 row in set (0.00 sec)

加密演算法有幾個弱點:

1、不支援大小寫

2、不支援中文

3、加密強度不夠

有興趣的人可以研究一下解密函式如何編寫,這裡就不贅述了。

MySQL5建立儲存過程例項

以下的文章主要是介紹mysql5建立儲存過程的例項演示,mysql5建立儲存在實際操作中應用的頻率還是很高的,以下就是mysql5建立儲存過程的例項具體描述,希望在你今後的學習中會有所幫助。1 用mysql客戶端登入 2 選擇資料庫 mysql use test 3 查詢當前資料庫有哪些儲存過程 m...

mysql5 新特性 支援儲存過程!!

支援儲存過程是mysql5中乙個很重要的新增特性。因為儲存過程有很多好處 使用者可以重用 和更改控制 和將業務邏輯流程寫入多個應用程式不同的是,使用者只需要寫 一次儲存過程就可以立刻使用許多應用程式來呼叫該過程,從而實現特定的業務邏輯流程。資料庫管理員也可以通過標準的管理函式來處理不同版本中的資料庫...

MySQL5建立儲存過程例項,指南

1 用mysql客戶端登入 2 選擇資料庫 mysql use test 3 查詢當前資料庫有哪些儲存過程 mysql show procedure status where db test 4 建立乙個簡單的儲存過程 mysql create procedure hi select hello 5...