扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
Public Class Form1
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册、雅安服务器托管、营销软件、网站建设、周口网站维护、网站推广。
Dim b() As Byte
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
b = System.Text.Encoding.Default.GetBytes(TextBox1.Text)
For i = 0 To UBound(b)
TextBox2.AppendText(i.ToString " ")
Next
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
TextBox1.Text = System.Text.Encoding.Default.GetString(b)
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
TextBox1.Text = "Google free online translation service instantly translates text and web pages。 该翻译器支持: 中文(简体), 中文(繁体), shqip, 日本语, русский, langue française ..."
End Sub
End ClassVB.Net中用String类型表示字符串,内部采用Unicode编码。当需要在网络或串口中收发字符串时,就需要在String和Byte数组之间进行转换,这项功能可以通过System.Text.Encoding类实现。
Private zeroChars() As Char = {ChrW(0)}
Dim descBytes() As Byte = System.Text.Encoding.Unicode.GetBytes(mDescription)
Dim description As String = System.Text.Encoding.Unicode.GetString(rBuffer, offset, length).TrimEnd(zeroChars)
说明:C语言中用'\0'表示字符串结束,而String类型中0是有效字符,显示时是空白字符,会占用显示宽度,可以用TrimEnd方法将字符串末尾的零字符去掉。
主要叙说一下StrConv 函数conversion参数最后两个值的含义和用途,并举例说明。
1、语法
StrConv(string, conversion, LCID)
StrConv 函数的语法有下面的命名参数:
部分 说明
string 必要参数。要转换的字符串表达式。
conversion 必要参数。Integer。其值的和决定转换的类型。
LCID 可选的。如果与系统LocaleID不同,则为LocaleID(系统LocaleID为缺省值。)
设置值
conversion 参数的设置值为:
常数 值 说明
vbUpperCase 1 将字符串文字转成大写。
vbLowerCase 2 将字符串文字转成小写。
vbProperCase 3 将字符串中每个字的开头字母转成大写。
vbWide* 4* 将字符串中单字节字符转成双字节字符。
vbNarrow* 8* 将字符串中双字节字符转成单字节字符。
vbKatakana** 16** 将字符串中平假名字符转成片假名字符。
vbHiragana** 32** 将字符串中片假名字符转成平假名字符。
vbUnicode 64 根据系统的缺省码页将字符串转成 Unicode。
vbFromUnicode 128 将字符串由 Unicode 转成系统的缺省码页。
*应用到远东国别。
**仅应用到日本。
说明:前面3个参数比较简单,后面4个我们用不上,就不说了,主要说说后面两个。
2、ANSI 格式
语法中说的缺省码页就是ANSI模式,英文环境下 的ANSI 格式其实也就是ASCII码,其它环境就不一样了,比如中文环境,就是ASCII,一个字节表示一个字符,GB2312,2个字节表示一个汉字,所以中文环境下的ANSI格式就是ASCII码+GB2312,早期的DOS系统中纯文本就是这种格式,这种格式下,通过最高位来判断是中文字符(最高位是1)还是ASCII字符(最高位是0)。中文环境下保存文本文件时一般都采用ANSI格式,不过也有其他格式,比如UTF-8。
3、Unicode编码
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。Unicode用两个字节表示一个字符,涵盖了世界上所有字符,和以前的字符集都不兼容,VB内部字符串就是采用Unicode编码,所以当我们打开一个文本文件读入数据的时候,其内存中的内容和文本文件的内容是不一样的,经过了转换,除非你采用二进制方式读入。
4、vbUnicode和vbFromUnicode含义
有了上面叙说,这两个参数的含义就好理解了,就是Unicode编码和ANSI编码的互换,例如:
textline= StrConv(plaintext,vbUnicode)
这儿textline是以字符串变量,plaintext是以字节变量保存着ANSI模式的字符内容,例如,“2”这个字符,一个字节,值是50,16进制是32,“皖”这个汉字,两个字节,值是205和238,同样是这两个字符,作为字符串在内存中都是两个字节,例如,“2”这个字符在内存中16进制值是0032。当VB打开一个文件读取文本内容是,实际上自动进行了上述转换。
plaintext = StrConv(textline, vbFromUnicode)
这儿进行相反的转换,就是将Unicode字符串转换成ANSI模式,转换结果必须以字节方式保存。
5、vbUnicode和vbFromUnicode用途
由于字符在内存中的内容和文件中的内容不一致,所以必须要用到这种转换,特别是系统间进行数据交换、数据加密和解密,如果不做转换可能导致得不到正确的结果。
比如,我们对一个文本文件进行加密,这个文件是ANSI格式存储的,当从文件内容读入一行到内存的时候,自动将内容转换成了Unicode格式,如果这时候对其做加密运算,其结果和文件中字符串加密结果是不一样的,这样的结果如果让别人解密将无法得到正确的结果。如果对读入内存的内容先做个转换(textline是读入内容):
plaintext = StrConv(textline, vbFromUnicode)
再对plaintext做加密,其结果就一样了。
举例(按行做加密和解密运算,算法是AES+Base64):
[vb] view plain copy
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
[vb] view plain copy
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
.Net软件
特点,
些强
编译工具
.Net
执行文件进行反编译操作,并
相应
IL代码甚至
源代码
即使
采用混淆工具
及强命名工具
能
根本
解决问题,代码依
容易
Reflectoer等工具反编译源代码
软件加密狗:威步(WIBU)
CodeMeter,AxProtector(for.net)两款软件加密狗性能非
错
反编译
问题,与传统
代码混淆工具(Obfuscator)
同,AxProtector
完全阻止
.NET
程序集(由
C#,
VB.NET,
Delphi.NET,
ASP.Net…
等语言编写)
反编译
通俗
讲,AxProtector
破解者
您
.NET
代码
间构建
强
防破解保护屏障,
基于
Windows
基于
MSIL
兼容格式文件
原始
.NET
代码完整
加密
封装
本
代码内,
论何
都
释放
硬盘,
于破解者
见
与单纯
.net加密软件
同,AxProtector与CodeMeter硬件加密狗配套餐使用,采用
更
严密
密钥管理,及
先进
AES、RSA、ECC等加密算
存储或传输密钥,保证通讯安全
.Net代码编译
.class
包含
源代码
所
信息(
包括注释),尤其
其
保存
调试信息
候
所
按照
式编译
.class
文件
非
轻易
反编译
般软件
发商
采用
种叫做混淆器
工具
混淆器
作用
编译
代码进行混淆,使
其
反编译或者反编译
代码混乱难懂
由于混淆器
混淆
名称或流程,
能防止源代码
反编译,
混淆器
作用
增加
反编译
难度,
终
结
治标
治本
于
些掌握工具
说几乎
透明
AxProtector
款真
意义
加密源代码、防止反编译
.net软件加密软件
AxProtector加密
.net原代码,任何
候原代码都
能
原
硬盘
采用AxProtector加密
.net代码
程序调用或执行某
段函数
候,才能通
AxProtectorClass
内存
解密
返
程序
执行,运行
迅速立即加密
种随机加密、按需解密原代码
功能,能
防止.Net程序
反编译,同
能够
防止API加密点
摘除
效
保证
源代码
执行效率
安全性
首先,MD5不是用来压缩的,MD5值是用来作为message authentication code,本身是不可逆的。其实这也很容易理解,因为md5值只有128 bits,表示的值范围就在0~2^128这个区间内,而要做md5的数据是无穷的,也就是有无数的数据有相同的md5值,当然是不可能恢复原始数据了!
其次,用aes或者des或者任何安全的加密体制加密后得到的字符串,按照密码学安全性定义,应该是伪随机字符串,简单地说就是看起来和随机字符串没有什么区别,没有特殊结构,没有信息冗余,达不到这些要求,就不是一个安全的加密体制。而字符串压缩,就是要提取这种特殊结构或者信息冗余,既然不存在,字符串压缩算法根本不会起作用!这就是为什么平时你压缩文本文件时压缩比很大,因为文本冗余度非常高!而压缩可执行文件或者DLL时,压缩后大小几乎没怎么改观,因为随机程度很高,冗余度很小!
综上所述,用aes加密后的字符串,是不能再进行压缩的!希望我说得够清楚!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流