不帅 发表于 2015-1-16 22:22:04

MSSQL教程之稻加密与解密技g之一 FOXPRO篇

闪回的目的是要让数据库在commit之后,还能恢复到之前的某个状态,整库或指定的表。加密|解密
稻加密与解密技g之一FOXPRO篇
作者:CCBZZP

在F的弥,稻莸陌踩呛苤匾,特e是象y行等保密性十分主要的部T,
以是稻莸募用芫吞e主要,P者在L期的弥锌Y出各类稻的加密息争密的
法,但愿Υ蠹矣助,同r也和人人一同探,一同W,配合M步!

FOXPRO橛籼峁┮恍┑图的文件操纵函,使用@些低的操纵函涤艨梢FΦ图文件的操纵,@些低的函抵饕:FCLOSE(),FCREATE(),FEOF(),FERROR(),FFLUSH(),FGETS(),FOPEN(),FPUTS(),FREAD(),FSEEK(),STRTOFILE()等,@些函档木咛逵梅ㄔ诖司筒痪咛宓拿枋,鄙人面的文章中眠@些函档.

1.稻葸M行加密

上面以修正一用舻拿艽a槔碚f明:

程序CHANG_PASSWORD的CLICK()热:

IFVARTYPE(m.id_man)C.OR.VARTYPE(m.id_psd)C
=MESSAGEBOX(]有]冤u不成以更密ao,0+48+0,信息提醒u)=6
RETURN
ELSE
SELECT&father_table.
LOCATEFORALLTRIM(id_man)==ALLTRIM(m.id_man);
.AND.

ALLTRIM(THIS.PARENT.encrypt_data.CLICK(id_psd,m.id_man))==ALLTRIM(m.id_psd);
.AND.!DELETED()
IFFOUND()
IFALLTRIM(m.new_password1)==ALLTRIM(m.new_password2)
REPLACE&father_table..id_psdWITH

THIS.PARENT.encrypt_data.CLICK(m.new_password1,m.id_man)
=MESSAGEBOX(密a更乐成u,0+48+0,信息提醒u)
ELSE
=MESSAGEBOX(密a]有更u纱涡旅艽a纷歧致u,0+48+0,信息提醒u

)
ENDIF
ELSE
=MESSAGEBOX(密a]有更uf密ae`u,0+48+0,信息提醒u)
ENDIF
ENDIF
THIS.PARENT.RELEASE()




程序encrypt_data的CLICK()热:

LPARAMETERSencrypt_password,encrypt_chr
encrypt_chr=ALLTRIM(UPPER(encrypt_chr))
encrypt_chr1=340821960120581
encrypt_long=LEN(encrypt_chr1)
encrypt_chr2=LEFT(encrypt_chr+encrypt_chr+encrypt_chr+encrypt_chr,encrypt_long)
THIS.return_data=
FORi=1TOencrypt_longSTEP1
alteration_chr=CHR(BITXOR(ASC(SUBST(encrypt_chr1,i,1)),ASC(SUBST(encrypt_chr2,i,1))))


THIS.return_data=THIS.return_data+CHR(BITXOR(ASC(SUBST(encrypt_password,i,1)),ASC(alterati

on_chr)))
ENDFOR
RETURNTHIS.return_data


2.稻文件M行加密
假设存在稻文件C:USERS.DBF;

HANDLE1=FOPEN("C:USERS.DBF")
IFHANDLE1<0
MESSAGEBOX("]有找到指定文件...",0+64,"信息提醒!")
RETURN
ENDIF
I=1
HANDLE2=FCREATE("C:USERS.DBF")
DOWHILE.T.
=FSEEK(HANDLE1,I*32)
RETASC=FREAD(HANDLE1,32)
IFASC(RETASC)=13
EXIT
ENDIF
I=I+1
ENDDO
=FSEEK(HANDLE1,0)
RETSTR=FREAD(HANDLE,I*32)
=FWRITE(HANDLE2,RETSTR)
X=I*32
J=0
DOWHILE.NOT.FEOF(HANDLE1)
=FSEEK(HANDLE1,X+J)
RETASC=FREAD(HANDLE1,1)
IFASC(RETASC)>253
CH=CHR(255-ASC(RETASC))
ELSE
CH=CHR(ASC(RETASC)+2)
ENDIF
=FWRITE(HANDLE2,CH)
J=J+1
ENDDO
MESSAGEBOX("加密乐成...",0+64,"信息提醒!")
=FCLOSE(HANDLE1)
=FCLOSE(HANDLE2)
RETURN



3.稻文件M行解密
假设存在稻文件C:USERS.DBF;

HANDLE1=FOPEN("C:USERS.DBF")
IFHANDLE1<0
MESSAGEBOX("]有找到指定文件...",0+64,"信息提醒!")
RETURN
ENDIF
HANDLE2=FCREATE("C:USERS.DBF")
I=1
DOWHILE.T.
=FSEEK(HANDLE1,I*32)
RETASC=FREAD(HANDLE1,32)
IFASC(RETASC)=13
EXIT
ENDIF
I=I+1
ENDDO
=FSEEK(HANDLE1,0)
RETSTR=FREAD(HANDLE,I*32)
=FWRITE(HANDLE2,RETSTR)
X=I*32
J=0
DOWHILE.NOT.FEOF(HANDLE1)
=FSEEK(HANDLE1,X+J)
RETASC=FREAD(HANDLE1,1)
IFASC(RETASC)<2
CH=CHR(255-ASC(RETASC))
ELSE
CH=CHR(ASC(RETASC)-2)
ENDIF
=FWRITE(HANDLE2,CH)
J=J+1
ENDDO
MESSAGEBOX("解密乐成...",0+64,"信息提醒!")
=FCLOSE(HANDLE1)
=FCLOSE(HANDLE2)
RETURN


以上假如要Dd说明出.

待m...
mysql的prepare其实是本地PHP客户端模拟的,并没有根据你mysql的设置做字符集的调整。应该交与mysqlserver端做prepare,同时得调用mysql_set_character_set去操作,server才会按照字符集去做转义。

深爱那片海 发表于 2015-1-19 09:33:57

原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!

若天明 发表于 2015-1-25 23:10:43

理解了存储结构,再阅读下性能优化的章节基本上会对sqlserver有个清晰地认识

仓酷云 发表于 2015-2-4 13:12:13

我是新手,正在学习数据库和操作系统,深感理论的泛广,唯有一步一步来,但是又感觉时间不够,收集了很多资料却总是没能认真的看完,希望有一个讨论板块,大家共同解决,共同分享,共同努力

分手快乐 发表于 2015-2-9 23:13:31

原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!

爱飞 发表于 2015-2-28 04:36:17

其实可以做一下类比,Oracle等数据库产品老早就支持了java编程,而且提供了java池参数作为用户配置接口。但是现在有哪些系统大批使用了java存储过程?!连Oracle自己的应用都不用为什么?!

活着的死人 发表于 2015-3-9 21:06:01

备份方面可能还是一个老大难的问题。不能单独备份几个表总是感觉不爽。灵活备份的问题不知道什么时候才能解决。

再现理想 发表于 2015-3-17 01:10:12

你可以简单地认为适合的就是好,不适合就是不好。

变相怪杰 发表于 2015-3-23 14:29:58

作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!
页: [1]
查看完整版本: MSSQL教程之稻加密与解密技g之一 FOXPRO篇