标签:visual basic 6.0 加密 解密 编码
作者:iamlaosong
主要叙说一下StrConv 函数conversion参数最后两个值的含义和用途,并举例说明。
1、语法
2、ANSI 格式
语法中说的缺省码页就是ANSI模式,英文环境下 的ANSI 格式其实也就是ASCII码,其它环境就不一样了,比如中文环境,就是ASCII,一个字节表示一个字符,GB2312,2个字节表示一个汉字,所以中文环境下的ANSI格式就是ASCII码+GB2312,早期的DOS系统中纯文本就是这种格式,这种格式下,通过最高位来判断是中文字符(最高位是1)还是ASCII字符(最高位是0)。中文环境下保存文本文件时一般都采用ANSI格式,不过也有其他格式,比如UTF-8。
3、uncode编码
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。Unicode用两个字节表示一个字符,涵盖了世界上所有字符,和以前的字符集都不兼容,VB内部字符串就是采用Unicode编码,所以当我们打开一个文本文件读入数据的时候,其内存中的内容和文本文件的内容是不一样的,经过了转换,除非你采用二进制方式读入。
4、vbUnicode和vbFromUnicode含义
有了上面叙说,这两个参数的含义就好理解了,就是Unicode编码和ANSI编码的互换,例如:
textline= StrConv(plaintext,vbUnicode)
这儿textline是以字符串变量,plaintext是以字节变量保存着ANSI模式的字符内容,当VB打开一个文件读取文本内容是,实际上自动进行了上述转换。
plaintext = StrConv(textline, vbFromUnicode)
这儿进行相反的转换,就是将Unicode字符串转换成ANSI模式,转换结果必须以字节方式保存。
5、vbUnicode和vbFromUnicode用途
由于字符在内存中的内容和文件中的内容不一致,所以必须要用到这种转换,特别是系统间进行数据交换、数据加密和解密,如果不做转换可能导致,内容不一致。
比如,我们对一个文本文件进行加密,这个文件是ANSI格式存储的,当从文件内容读入一行到内存的时候,自动将内容转换成了Unicode格式,如果这时候对其做加密运算,其结果和文件中字符串加密结果是不一样的,这样的结果如果让别人解密将无法得到正确的结果。如果对读入内存的内容先做个转换(textline是读入内容):
plaintext = StrConv(textline, vbFromUnicode)
再对plaintext做加密,其结果就一样了。
举例:
Status = "Encrypting File" Open FileName For Input As #1 ' 打开输入文件。 Open FileName2 For Output As #2 ' 打开输出文件。 Do While Not EOF(1) Line Input #1, TextLine plaintext = StrConv(TextLine, vbFromUnicode) Status = "Encrypting Data" m_Rijndael.SetCipherKey pass, KeyBits m_Rijndael.ArrayEncrypt plaintext, ciphertext, 0 Status = "Converting Text to Base64" TextLine = Base64Encode(ciphertext) Status = "" Print #2, TextLine ' 将字符串写入文件。 Loop Close
Status = "Decrypting File" Open FileName For Input As #1 ' 打开输入文件。 Open FileName2 For Output As #2 ' 打开输出文件。 Do While Not EOF(1) Line Input #1, TextLine Status = "Converting Base64 to Text" ciphertext = Base64Decode(TextLine) Status = "Decrypting Data" m_Rijndael.SetCipherKey pass, KeyBits If m_Rijndael.ArrayDecrypt(plaintext, ciphertext, 0) <> 0 Then Status = "" Exit Sub End If TextLine = StrConv(plaintext, vbUnicode) For i = 0 To UBound(plaintext) Debug.Print plaintext(i) Next i k = InStr(1, TextLine, Chr(0), vbBinaryCompare) If k > 0 Then TextLine = Left(TextLine, k - 1) '截掉加密时补的0 MsgBox TextLine & "end" Status = "" Print #2, TextLine ' 将字符串写入文件。 Loop Close
StrConv 函数的vbUnicode和vbFromUnicode含义及用途,布布扣,bubuko.com
StrConv 函数的vbUnicode和vbFromUnicode含义及用途
标签:visual basic 6.0 加密 解密 编码
原文地址:http://blog.csdn.net/iamlaosong/article/details/38380413