加密算法:
CREATE OR REPLACE PROCEDURE U_ldsPassWord (s_inno IN VARCHAR2,
s_outpass IN OUT VARCHAR2)
/*密码加密*/
/* Source is wrapped */
/*当用户为LDS 时,密码为lds 或LDS都一样*/
AS
s_no VARCHAR2(4);
i_i NUMBER;
i_passlen NUMBER;
i_j NUMBER;
i_nolen NUMBER;
i_value NUMBER;
s_str VARCHAR2(32);--VARCHAR2(32);
s_defpass VARCHAR2(32);--CHAR(32);
s_pass VARCHAR2(32);
s_reverno VARCHAR2(32);
i_reveri NUMBER;
i_reverj NUMBER;
begin
IF (LENGTH(s_inno)<4) THEN s_no:=u_ufright('0000'||s_inno,4); --LPAD(s_inno,4,'0');
ELSE s_no:=s_inno; END IF;--将密码的字符顺序倒序排列
i_reveri:=1;
i_reverj:=LENGTH(s_no);
s_reverno:=SUBSTR(s_no,-1,1);
WHILE i_reveri<i_reverj LOOP
i_reveri:=i_reveri+1;
s_reverno:=s_reverno||SUBSTR(s_no,-i_reveri,1);
END LOOP;
s_defpass:='?/>.<,'||s_reverno||'~`_-+=|\'||SUBSTR(s_no,1,1)||']}[{'||
SUBSTR(s_no,4,1)||';:''"'||s_no;
IF ((s_outpass='') OR (s_outpass IS NULL)) THEN s_pass:=s_defpass;--RPAD(s_defpass,32);
ELSE s_pass:=s_outpass;--RPAD(s_outpass,32);
END IF; i_i:=0;
i_j:=0;
i_value:=0;
i_nolen:=4;
i_passlen:=LENGTH(s_pass);
WHILE (i_passlen<32) LOOP
i_value:=mod((ASCII(SUBSTR(s_no,1,1))+ASCII(SUBSTR(s_no,2,1))+
ASCII(SUBSTR(s_no,3,1))+ASCII(SUBSTR(s_no,4,1))+
i_passlen),32);
IF i_value=0 THEN i_value:=1; END IF;
s_pass:=LPAD((s_pass||NVL(SUBSTR(s_defpass,i_passlen,i_value),'A')),32);
i_passlen:=LENGTH(s_pass);
END LOOP; WHILE (i_i<i_passlen) LOOP
i_i:=i_i+1;
i_j:=i_j+1;
IF i_j>i_nolen THEN i_j:=1; END IF;
i_value:=i_value+(i_i+i_j)*(ASCII(SUBSTR(s_pass,i_i,1))+
ASCII(SUBSTR(s_no,i_j,1)));
END LOOP;
i_i:=1;
s_str:=CHR(mod(i_value,57)+40606);
i_j:=mod(i_value,32)+16;
-- IF (i_j>32) THEN i_j:=32; END IF;
IF (i_j>16) THEN i_j:=16; END IF;
WHILE (i_i<i_j) LOOP
i_i:=i_i+1;
s_str:=(CHR(mod((i_value+ASCII(SUBSTR(s_pass,i_i,1))*104*i_i),68)+40606)||
--CHR((i_value+ASCII(SUBSTR(s_pass,i_i,1))*104*i_i) mod 57+39148)||
s_str);
/*
s_str:=LPAD((CHR(mod((i_value+ASCII(SUBSTR(s_pass,i_i,1))*104*i_i),68)+40606)||
--CHR((i_value+ASCII(SUBSTR(s_pass,i_i,1))*104*i_i) mod 57+39148)||
s_str),32);*/
END LOOP;
s_outpass:=s_str; END u_ldsPassWord;
CREATE OR REPLACE PROCEDURE U_ldsPassWord (s_inno IN VARCHAR2,
s_outpass IN OUT VARCHAR2)
/*密码加密*/
/* Source is wrapped */
/*当用户为LDS 时,密码为lds 或LDS都一样*/
AS
s_no VARCHAR2(4);
i_i NUMBER;
i_passlen NUMBER;
i_j NUMBER;
i_nolen NUMBER;
i_value NUMBER;
s_str VARCHAR2(32);--VARCHAR2(32);
s_defpass VARCHAR2(32);--CHAR(32);
s_pass VARCHAR2(32);
s_reverno VARCHAR2(32);
i_reveri NUMBER;
i_reverj NUMBER;
begin
IF (LENGTH(s_inno)<4) THEN s_no:=u_ufright('0000'||s_inno,4); --LPAD(s_inno,4,'0');
ELSE s_no:=s_inno; END IF;--将密码的字符顺序倒序排列
i_reveri:=1;
i_reverj:=LENGTH(s_no);
s_reverno:=SUBSTR(s_no,-1,1);
WHILE i_reveri<i_reverj LOOP
i_reveri:=i_reveri+1;
s_reverno:=s_reverno||SUBSTR(s_no,-i_reveri,1);
END LOOP;
s_defpass:='?/>.<,'||s_reverno||'~`_-+=|\'||SUBSTR(s_no,1,1)||']}[{'||
SUBSTR(s_no,4,1)||';:''"'||s_no;
IF ((s_outpass='') OR (s_outpass IS NULL)) THEN s_pass:=s_defpass;--RPAD(s_defpass,32);
ELSE s_pass:=s_outpass;--RPAD(s_outpass,32);
END IF; i_i:=0;
i_j:=0;
i_value:=0;
i_nolen:=4;
i_passlen:=LENGTH(s_pass);
WHILE (i_passlen<32) LOOP
i_value:=mod((ASCII(SUBSTR(s_no,1,1))+ASCII(SUBSTR(s_no,2,1))+
ASCII(SUBSTR(s_no,3,1))+ASCII(SUBSTR(s_no,4,1))+
i_passlen),32);
IF i_value=0 THEN i_value:=1; END IF;
s_pass:=LPAD((s_pass||NVL(SUBSTR(s_defpass,i_passlen,i_value),'A')),32);
i_passlen:=LENGTH(s_pass);
END LOOP; WHILE (i_i<i_passlen) LOOP
i_i:=i_i+1;
i_j:=i_j+1;
IF i_j>i_nolen THEN i_j:=1; END IF;
i_value:=i_value+(i_i+i_j)*(ASCII(SUBSTR(s_pass,i_i,1))+
ASCII(SUBSTR(s_no,i_j,1)));
END LOOP;
i_i:=1;
s_str:=CHR(mod(i_value,57)+40606);
i_j:=mod(i_value,32)+16;
-- IF (i_j>32) THEN i_j:=32; END IF;
IF (i_j>16) THEN i_j:=16; END IF;
WHILE (i_i<i_j) LOOP
i_i:=i_i+1;
s_str:=(CHR(mod((i_value+ASCII(SUBSTR(s_pass,i_i,1))*104*i_i),68)+40606)||
--CHR((i_value+ASCII(SUBSTR(s_pass,i_i,1))*104*i_i) mod 57+39148)||
s_str);
/*
s_str:=LPAD((CHR(mod((i_value+ASCII(SUBSTR(s_pass,i_i,1))*104*i_i),68)+40606)||
--CHR((i_value+ASCII(SUBSTR(s_pass,i_i,1))*104*i_i) mod 57+39148)||
s_str),32);*/
END LOOP;
s_outpass:=s_str; END u_ldsPassWord;
FUNCTION TGCFP.ENCRYPT(PASSWORD_STR: STRING):STRING;
VAR
TMP_STR : STRING;
// TMP_CHAR : CHAR;
I,J,K,L,M : WORD;
BEGIN
ENCRYPT := '';
TMP_STR := '';
DecodeTime(NOW, I,J, K, L); {procedure DecodeTime(Time: TDateTime; var Hour, Min, Sec, MSec: Word)}
// M := 0; {I: HOUR, J: MIN, K: SEC, L:MSEC(微秒) }
L := 60+(L DIV 16);
TMP_STR := CHR(L);
I := LENGTH(PASSWORD_STR);
IF I<1 THEN EXIT;
FOR J:=1 TO I DO
BEGIN
// TMP_CHAR := PASSWORD_STR[J];
K := ORD(PASSWORD_STR[J]);
IF K>=100 THEN
BEGIN
M := K DIV 100;
TMP_STR := TMP_STR + CHR(M*8+32+(L DIV 10));
M := (K - ( M * 100 )) DIV 10;
TMP_STR := TMP_STR + CHR(M*8+32+(L DIV 10));
M := (K - (K DIV 100)*100 - (M * 10));
TMP_STR := TMP_STR + CHR(M*8+32+(L DIV 10));
END
ELSE
IF (K<100) AND (K>=10) THEN
BEGIN
M := K DIV 10;
TMP_STR := TMP_STR + CHR(M*8+32+(L DIV 10));
M := (K - (M * 10));
TMP_STR := TMP_STR + CHR(M*8+32+(L DIV 10));
END;
END;
ENCRYPT := TMP_STR;
END;
FUNCTION TGCFP.DECRYPT(PASSWORD_STR: STRING):STRING;
VAR
TMP_STR : STRING;
I,J,K,L,M : WORD;
BEGIN
DECRYPT := '';
TMP_STR := '';
L := 0;
M := 0;
I := LENGTH(PASSWORD_STR);
IF I<2 THEN EXIT;
L := ORD(PASSWORD_STR[1]);
L := L DIV 10;
FOR J:=2 TO I DO
BEGIN
K := ORD(PASSWORD_STR[J]);
K := (K-32-L) DIV 8;
M := M*10+K;
IF M>=32 THEN
BEGIN
TMP_STR := TMP_STR + CHR(M);
M := 0;
END;
END;
DECRYPT := TMP_STR;
END;
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2002</p>
* <p>Company: </p>
* @author unascribed
* @version 1.0
*/import java.io.PrintStream;public class encrypt
{ static String sWrong;
static String sSkey = "207806514039"; public encrypt()
{
sWrong = "";
} public static String encryptkey(String s, int i)
{
String s1 = s;
int j = s.length();
if(i <= j)
s1 = s.substring(0, i);
else
for(; j < i; j = s1.length())
if(j + s.length() >= i)
s1 = s1 + s.substring(0, i - j);
else
s1 = s1 + s; return s1;
} public String encrypt(String s, String s1)
{
String s2 = "";
if(s1 == "")
{
sWrong = "字符串为空!";
return s2;
}
if(s == "")
{
sWrong = "请指定密钥!";
return s2;
}
int i = s1.length();
String s3 = encryptkey(s, i);
for(int k = 0; k < i; k++)
{
char c = s1.charAt(k);
char c1 = s3.charAt(k);
char c2 = c;
char c3 = c1;
int j = c2 ^ c3;
j += 29;
j = 1000 + ((j / 10) % 10) * 100 + (j / 100) * 10 + j % 10;
s2 = s2 + Integer.toString(j).substring(1);
} return s2;
} public String encrypt(String s)
{
return encrypt(sSkey, s);
} public static String decode(String s, String s1)
{
String s2 = "";
if(s1 == "")
{
sWrong = "字符串为空!";
return s2;
}
if(s == "")
{
sWrong = "请指定密钥!";
return s2;
}
int i = s1.length() / 3;
String s3 = encryptkey(s, i);
for(int l = 0; l < i; l++)
{
String s4 = s1.substring(l * 3, (l + 1) * 3);
char c1 = s3.charAt(l);
int k = Integer.parseInt(s4);
k = ((k / 10) % 10) * 100 + (k / 100) * 10 + k % 10;
char c2 = c1;
int j = k - 29 ^ c2;
char c = (char)j;
s2 = s2 + c;
} return s2;
} public static String decode(String s)
{
return decode(sSkey, s);
}
public static void main(String args[])
throws Exception
{
String str = "000000";
String key = "207806514039";
encrypt encrypt = new encrypt(); str = encrypt.encrypt(str);//加密
System.out.println(str); str =decode(key, str); //解密
System.out.println(str);
}}