`
yiyeqinghuasoon
  • 浏览: 644400 次
文章分类
社区版块
存档分类
最新评论

关于文件的加密

 
阅读更多

我们在开发程序的时候,通常都会遇到加密的问题,数字化时代,加密的安全性是很高的.

简单地说,以前的纯调频/调幅的电波通讯完全是敞开式的,后来的莫尔斯电码也容易被猜解,

然而在数字化时代,我们传输的数据是0和1组成的二进制代码,除非你知道他的约定,否则,

用暴力猜解的方法是很难的.

在Visual Basic 中,加密通常应用在字符串,字符串加密常见的就三种方法:

ASCII代码移位加密;

XOR异或运算加密;

字表随机对调加密;

所谓ASCII移位就是将字符串逐个字符的ASCII编码顺推或者逆推若干位,如:

public function Encode(Byval str as string)as string

dim i as Long

if str = "" then exit function

encode = ""

for i = 0 to len(str)

encode = encode + chr(asc(mid(str,i,1))+5)

next i

end function

但是这种方法容易被暴力猜解,破解者只要提取一小段,逐个试过去,65535对计算机来说

简直是小菜一碟.

字表随机对调加密就是建立一张对照表(密码表),这跟莫尔斯电码差不多,加密的时候就完全把字母打乱,

但是很难应用于汉字,而且人工解密难度大,一旦变更子表很难熟练的解密.

public function Encode(byval str as string)as string

str = replace(str,"S","|")

str = replace(str,"A","S")

...

end function

XOR加密是数字化加密运用的好例子,加密的方式多种多样,而且密码可以很长,甚至很变态.

比较经典的加密如下:


Private Const strDefault As String = "h1d9y8x7" '设置默认密码

'XOR加密/解密是相同的
Public Function Dencrypt(byval strSource As String, Optional ByVal strKey As String = "") As String
Dim l As Long, strCrypt As String
Dim iValue As Integer, jValue As Integer

If Len(strKey) < 2 Then strKey = strDefault

Mid(strKey, 2, 1) = Asc(X)

For l = 1 To Len(strSource)
'第一个XOR值

iValue = Asc(Mid$(strSource, l, 1))
'第二个XOR值
jValue = Asc(Mid$(strKey, ((l Mod Len(strKey)) + 1), 1)) //这里会出现反复算法
'两个值XOR运算 比如asc("A") Xorasc("B") = 3

strCrypt = strCrypt + Chr(iValue Xor jValue)
Next l

Dencryption = strCrypt
End Function

我还曾经遇到过用随机数加密的 XOR算法,当时没注意分析,也没留下来.

XOR运算加密十分灵活,在大家多体会,此外XOR也可以应用于二进制文件,

然而对于图片啊视频啊什么的,我们通常只用文件头加密,那样运算快,消费比较好.

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics