字符加密,解密
有没有,纯pb编写的加密,解密函数???
急急急急急急急急急急急急急急急急
问题点数:0、回复次数:12Top
1 楼ldy(罗大佑)回复于 2003-08-03 09:01:45 得分 0
PB自己得可能不太好,PB不支持位运算、指针等,加密效果可能不好。
还是用一些底层语言也许好一些Top
2 楼oydz()回复于 2003-08-04 15:14:05 得分 0
当然可以,你可以把一些其它语言的算法翻译过来就是了!Top
3 楼zxthello(万有斥力)回复于 2003-08-04 15:23:03 得分 0
pb实现很麻烦的,我曾经这样实现过
1:把字符用asc函数转换成asc值,然后转换成定长的'01'字符串
2:把你的密钥也转换成这样的‘01'字符串,然后与1的字符串进行位异或。
3:得到的结果转换成asc值,然后用char函数得到字符
解密进行反向操作即可!Top
4 楼antivence(铁丝面)回复于 2003-08-04 16:44:23 得分 0
麻烦!Top
5 楼arich(快乐人间)回复于 2003-08-04 17:54:45 得分 0
不就是字符串操作嘛,关键是看你需要加密到的程度。。别小看PB哦。。Top
6 楼love007(风中的风)回复于 2003-08-07 15:12:41 得分 0
参数:as1,as2
int li,li1
int listart = 1 ,lipos = 1
string lc
string ls1,lsrtn
lsrtn = ''
//参数:as1:原字符串
// ,as2:'S':加密,'U':解密
as1 = trim(as1)
if as2 = 'S' then
for li = 1 to len(as1)
lc = mid(as1,li,1)
li1 = asc(lc)
lsrtn = lsrtn + string(li1+10) + ' '
next
return lsrtn
end if
if as2 = 'U' then
lipos = pos(as1,' ',listart) - 1
do while lipos > 0
lsrtn = lsrtn + char(int(long(left(as1,lipos)) - 10))
as1 = mid(as1,lipos + 2)
lipos = pos(as1,' ',listart) - 1
loop
if len(as1) <> 0 then
lsrtn = lsrtn + char(int(long(as1) - 10))
end if
return lsrtn
end if
return ' 'Top
7 楼ASDC001(ASDC001)回复于 2003-08-13 14:53:44 得分 0
同意 arich(一千零一夜零一灌)
看你要达到什么程度,
Top
8 楼junly1981(浪子心声)回复于 2004-03-10 02:20:33 得分 0
我有一纯PB的RAS,要的话加我:101174928Top
9 楼junly1981(浪子心声)回复于 2004-03-15 02:33:21 得分 0
//函数名 Decrypt,返回string,变量string ls_jm
int li_e,li_d,li_n,li_cd,I,bl,zcd//
long lul_temp,lul_y
char str1[],str2[],str[]
string ls_str,bsw,z1,z2,ls_mw,ls_str_z
li_e=3 //
li_d=7 //
li_n=33 //
ls_mw=""
Trim(ls_jm)
ls_str_z=ls_jm //
zcd=Len(ls_str_z)
for bl=1 to zcd
lul_temp=0
str2=Mid(ls_str_z,bl,1)
str=str2
ls_str=String(asc(str))
//MessageBox("",ls_str)
do while ls_str <> ""
bsw="1" //
Trim(ls_str)
li_cd=Len(ls_str) //
lul_temp=Integer(Left(ls_str,2))
if lul_temp>=li_n then /N(N=33)
lul_temp=Integer(Left(ls_str,1))
ls_str=Right(ls_str,Len(ls_str)-1)
bsw="1"
else
if li_cd<>1 then
ls_str=Right(ls_str,Len(ls_str)-2)
bsw="2"
else
ls_str=Right(ls_str,Len(ls_str)-1)
bsw="1"
end if
end if
lul_y=1;
for I=0 to li_e -1 //
lul_y=lul_y*lul_temp
next
lul_y=Mod(lul_y,33) //
if lul_y=0 and bsw ='2' then
Trim(ls_mw)
ls_mw=ls_mw+"00"+bsw
elseif lul_y<10 then
Trim(ls_mw)
ls_mw=ls_mw+"0"+String(lul_y)+bsw //sle_2.tex
else
Trim(ls_mw)
ls_mw=ls_mw+String(lul_y)+bsw
end if
loop
next
return ls_mwTop
10 楼junly1981(浪子心声)回复于 2004-03-15 02:35:03 得分 0
//函数名 Encrypt,返回string,变量string ls_jm
int li_e,li_d,li_n,li_cd,iI,zcd,bl,bl1,ls_mws //
String ls_str,bsw,z1,z2,ls_mw,yw,MyChar
char str1[],str2[]
long lul_temp,lul_x,lul_x0,lul_x1
yw=ls_jm
li_e=3 // ????e,????
li_d=7 // ????d,????
li_n=33 // ??N:???????
MyChar=""
bsw="1"
zcd=Len(yw)
zcd=zcd/6
for bl=1 to zcd
bl1=((bl -1)*6+1)
ls_str=Mid(yw,bl1,6)
ls_mw=""
do while ls_str<>""
str2=Left(ls_str,2)
lul_temp=Integer(str2)
str2=Mid(ls_str,4,1)
li_cd=Integer(str2) //????
ls_str=Right(ls_str,Len(ls_str) -3) //?????,??????N(N=33?
// ?????????????,lul_x = lul_x0 * lul_x1
lul_x0=1
lul_x1=1
// ???????7,??????4??????,?????3??????
for iI=0 to 4 -1
lul_x0=lul_x0*lul_temp
next
lul_x0=Mod(lul_x0,33)
for iI=0 to li_d -4 -1
lul_x1=lul_x1*lul_temp
next
lul_x1=Mod(lul_x1,33)
lul_x=Mod((lul_x0*lul_x1),33) // ??????????
if lul_x=0 and li_cd=2 then
Trim(ls_mw)
ls_mw=ls_mw+"00"
elseif lul_x<=9 and li_cd=2 then
Trim(ls_mw)
ls_mw=ls_mw+"0"+String(lul_x) // ??????????
else
Trim(ls_mw)
ls_mw=ls_mw+String(lul_x)
end if
loop
str2=ls_mw
ls_mws=Integer(str2)
MyChar=MyChar+char(ls_mws)
ls_mw=""
ls_mws=0
next
return MyChar
Top
11 楼fulongbiao(一个人的精彩)回复于 2004-03-19 11:13:53 得分 0
1:把字符用asc函数转换成asc值,然后转换成定长的'01'字符串
2:把你的密钥也转换成这样的‘01'字符串,然后与1的字符串进行位异或。
3:得到的结果转换成asc值,然后用char函数得到字符
---------------
同意楼上的!Top
12 楼myclife(反方向的钟)回复于 2004-03-19 12:01:10 得分 0
考虑到用户可能试图旁路系统的情况,如物理地取走数据库,在通讯线路上窃听。对这样的威胁最有效的解决方法
就是数据加密,即以加密格式存储和传输敏感数据。
数据加密的术语有:明文,即原始的或未加密的数据。通过加密算法对其进行加密,加密算法的输入信息为明文和
密钥;密文,明文加密后的格式,是加密算法的输出信息。加密算法是公开的,而密钥则是不公开的。密文,不应为无
密钥的用户理解,用于数据的存储以及传输。
例:明文为字符串:
AS KINGFISHERS CATCH FIRE
(为简便起见,假定所处理的数据字符仅为大写字母和空格符)。假定密钥为字符串:
ELIOT
加密算法为:
1) 将明文划分成多个密钥字符串长度大小的块(空格符以"+"表示)
AS+KI NGFIS HERS+ CATCH +FIRE
2) 用00~26范围的整数取代明文的每个字符,空格符=00,A=01,...,Z=26:
0119001109 1407060919 0805181900 0301200308 0006091805
3) 与步骤2一样对密钥的每个字符进行取代:
0512091520
4) 对明文的每个块,将其每个字符用对应的整数编码与密钥中相应位置的字符的整数编码的和模27后的值取代:
5) 将步骤4的结果中的整数编码再用其等价字符替换:
FDIZB SSOXL MQ+GT HMBRA ERRFY
如果给出密钥,该例的解密过程很简单。问题是对于一个恶意攻击者来说,在不知道密钥的情况下,利用相匹配的
明文和密文获得密钥究竟有多困难?对于上面的简单例子,答案是相当容易的,不是一般的容易,但是,复杂的加密模
式同样很容易设计出。理想的情况是采用的加密模式使得攻击者为了破解所付出的代价应远远超过其所获得的利益。实
际上,该目的适用于所有的安全性措施。这种加密模式的可接受的最终目标是:即使是该模式的发明者也无法通过相匹
配的明文和密文获得密钥,从而也无法破解密文。
1. 数据加密标准
传统加密方法有两种,替换和置换。上面的例子采用的就是替换的方法:使用密钥将明文中的每一个字符转换为密
文中的一个字符。而置换仅将明文的字符按不同的顺序重新排列。
Top




