本帖最后由 群发软件 于 2017-5-16 13:29 编辑
本篇文章的主要开发环境是Visual Studio 2008,Visual Studio系列产品一直以来都提供了强大的控件功能,然而我们利用这些控件可以编写出功能强大的应用程序,Visual Studio2008在一些特性上也做出了许多的改进。本文主要利用微软的最新.net开发工具为大家展示文字加密与解密的应用方法,为大家介绍创建基本加密与解密程序的一些技巧。很适合.net开发工具的初学者,具有一定的实用价值。
打开 Visual Studio 2008在文件 (File) 菜单上,单击新建项目 (New Project)。 在新建项目 (New Project) 对话框的模板 (Templates) 窗格中,单击 Windows 应用程序(Windows Application)。单击确定 (OK) 如图1。
选择Form1窗体,在Form1窗体中添加如下控件:Label1、Label2、 Label3控件,TextBox1、TextBox2、TextBox3控件,Button1与Button2控件。
相关属性设置如下:
我们适当地调整界面,界面设置效果如下:图2
程序界面设置好后,我们需要创建类,在类中来输入与此程序相关的代码
选择<项目>---<添加类>---文件命名为:csmode 如图3
在编程之前首先我们需要知道System.Security.Cryptography 命名空间
System.Security.Cryptography 命名空间提供加密服务,包括安全的数据编码和解码
介绍部分常用的枚举
介绍部分常用的枚举进入csmode.vb类的代码事件
输入代码:
Imports System
Imports System.IO
Imports System.Security.Cryptography
Imports System.Text
Public Class csmode
Public Function Encrypt(ByVal StrInput As String) As String
Dim ByteInput As [Byte]() = Encoding.Default.GetBytes(StrInput)
Dim ms As New System.IO.MemoryStream
Dim DESC As New DESCryptoServiceProvider
Dim CStream As New CryptoStream(ms, DESC.CreateEncryptor(Encoding.Default.GetBytes("20000000"), Encoding.Default.GetBytes("字节数量")), CryptoStreamMode.Write)
CStream.Write(ByteInput, 0, ByteInput.Length)
CStream.FlushFinalBlock()
Return Convert.ToBase64String(ms.ToArray())
End Function
Public Function Decrypt(ByVal StrInput As String) As String
Dim ByteInput As [Byte]() = Convert.FromBase64String(StrInput)
Dim ms As New System.IO.MemoryStream
Dim DESC As New DESCryptoServiceProvider
Dim CStream As New CryptoStream(ms, DESC.CreateDecryptor(Encoding.Default.GetBytes("20000000"), Encoding.Default.GetBytes("字节数量")), CryptoStreamMode.Write)
CStream.Write(ByteInput, 0, ByteInput.Length)
CStream.FlushFinalBlock()
Return Encoding.Default.GetString(ms.ToArray())
End Function
End Class
选择Form1窗体,进入代码编辑器
首先进行声明
Imports System
Imports System.IO
Imports System.Text
Public Class Form1
Inherits System.Windows.Forms.Form
进入Button1_Click事件
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Encode As New csmode() '对文字进行加密产品推广软件 企业推广软件
TextBox2.Text = Encode.Encrypt(TextBox1.Text)
End Sub
进入Button2_Click事件
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim Decode As New csmode() '对文字进行解密
TextBox3.Text = Decode.Decrypt(TextBox2.Text)
End Sub
代码输入完毕,接下来运行程序进行测试。如图4
程序运行成功,以上是一个简单的文字加密与解密程序的编写过程,希望大家可以举一反三,利用这种思路可以编写出功能更强大的加解密程序。
VB.net加密和解密文本文件的实现方法,乐博网提示:txt文件中如果是英文和数字的才有效,如果是中文的,加密就无效了,有用到中文字符加密的朋友要自己改进了。
代码如下:
Imports System
Imports System.IO
Imports System.Security
Imports System.Security.Cryptography
Imports System.Text
Module Encrypt
Private Const sSecretKey As String = "password"
Public Sub Main()
EncryptFile("c:\乐博网\test.txt", _
"c:\乐博网\Encrypted.txt", _
sSecretKey)
DecryptFile("c:\乐博网\Encrypted.txt", _
"c:\乐博网\Decrypted.txt", _
sSecretKey)
End Sub
Sub EncryptFile(ByVal sInputFilename As String, _
ByVal sOutputFilename As String, _
ByVal sKey As String)
Dim fsInput As New FileStream(sInputFilename, _
FileMode.Open, FileAccess.Read)
Dim fsEncrypted As New FileStream(sOutputFilename, _
FileMode.Create, FileAccess.Write)
Dim DES As New DESCryptoServiceProvider()
'为DES算法设置安全码.
'必须是64位,8个字节
DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey)
DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)
'创建DES加密码实例
Dim desencrypt As ICryptoTransform = DES.CreateEncryptor()
'
Dim cryptostream As New CryptoStream(fsEncrypted, _
desencrypt, _
CryptoStreamMode.Write)
'读取文件到数组
Dim bytearrayinput(fsInput.Length - 1) As Byte
fsInput.Read(bytearrayinput, 0, bytearrayinput.Length)
'写到加密文件中
cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length)
cryptostream.Close()
End Sub
Sub DecryptFile(ByVal sInputFilename As String, _
ByVal sOutputFilename As String, _
ByVal sKey As String)
Dim DES As New DESCryptoServiceProvider()
DES.Key() = ASCIIEncoding.ASCII.GetBytes(sKey)
DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)
'读取加密文件万能营销 万能群发
Dim fsread As New FileStream(sInputFilename, FileMode.Open, FileAccess.Read)
'
Dim desdecrypt As ICryptoTransform = DES.CreateDecryptor()
'
Dim cryptostreamDecr As New CryptoStream(fsread, desdecrypt, CryptoStreamMode.Read)
'输出到解密文件
Dim fsDecrypted As New StreamWriter(sOutputFilename)
fsDecrypted.Write(New StreamReader(cryptostreamDecr).ReadToEnd)
fsDecrypted.Flush()
fsDecrypted.Close()
End Sub
End Module
|
[tr][/tr]
本演练演示如何借助 3DES (TripleDES) 算法的加密服务提供程序 (CSP) 版本,使用 DESCryptoServiceProvider 类加密和解密字符串。首先,创建封装 3DES 算法的简单包装器类,并将加密数据存储为 Base-64 编码字符串。之后,可使用该包装器在可公开访问的文本文件中安全地存储私有用户数据。
您可以使用加密来保护用户的机密信息(如密码),并使未经授权的用户无法读取凭据。这样可防止授权用户的身份被盗用,从而保护用户的资产并提供不可否认性。加密还可防止未经授权的用户访问用户数据。
VB.NET字符串加密解密的安全说明:
与 DES 相比,Rijndael(现在称为“高级加密标准”[AES])和“三重数据加密标准”(3DES) 算法提供的安全性更高,原因是破解它们所需的计算量更大。有关更多信息,请参见 DES 和 Rijndael。
创建加密包装器
将加密命名空间的导入语句添加到文件开头。
- Visual Basic
- Imports System.
Security.Cryptography
创建用来封装加密和解密方法的类。
- Visual Basic
- Public NotInheritable
Class Simple3Des - End Class
添加用来存储 3DES 加密服务提供程序的私有字段。
- Visual Basic
- Private TripleDes As New
TripleDESCryptoServiceProvider
添加私有方法,该方法将从指定密钥的哈希创建指定长度的字节数组。
- Visual Basic
- Private Function TruncateHash( _
- ByVal key As String, _
- ByVal length As Integer) _
- As Byte()
- Dim sha1 As New SHA1Crypto
ServiceProvider - ' Hash the key.
- Dim keyBytes() As Byte = _
- System.Text.Encoding.Unicode.
GetBytes(key) - Dim hash() As Byte = sha1.
ComputeHash(keyBytes) - ' Truncate or pad the hash.
- ReDim Preserve hash(length - 1)
- Return hash
- End Function
添加用来初始化 3DES 加密服务提供程序的构造函数。
key 参数控制 EncryptData 和 DecryptData 方法。
- Visual Basic
- Sub New(ByVal key As String)
- ' Initialize the crypto
provider. - TripleDes.Key = TruncateHash
(key, TripleDes.KeySize \ 8) - TripleDes.IV = TruncateHash
("", TripleDes.BlockSize \ 8) - End Sub
添加VB.NET字符串加密解密之加密的公共方法。
- Visual Basic
- Public Function EncryptData( _
- ByVal plaintext As String) _
- As String
- ' Convert the plaintext
string to a byte array. - Dim plaintextBytes() As Byte = _
- System.Text.Encoding.Unicode.
GetBytes(plaintext) - ' Create the stream.
- Dim ms As New System.IO.MemoryStream
- ' Create the encoder to
write to the stream. - Dim encStream As New CryptoStream(ms, _
- TripleDes.CreateEncryptor(), _
- System.Security.Cryptography.
CryptoStreamMode.Write) - ' Use the crypto stream to write
the byte array to the stream. - encStream.Write(plaintextBytes, 0,
plaintextBytes.Length) - encStream.FlushFinalBlock()
- ' Convert the encrypted stream
to a printable string. - Return Convert.ToBase64String
(ms.ToArray) - End Function