Private Function Encrypt(ByVal StrSource As String) As String'加密
Dim BLowData As Byte
Dim BHigData As Byte
Dim i As Long
Dim k As Integer
Dim StrEncrypt As String
Dim StrChar As String
Dim KeyTemp As String
Dim Key1 As Byte
For k = 1 To 30
KeyTemp = KeyTemp &CStr(Int(Rnd * (9) + 1))
Next
Key1 = CByte(Mid(KeyTemp, 11, 1) &Mid(KeyTemp, 27, 1))
For i = 1 To Len(StrSource)
StrChar = Mid(StrSource, i, 1) '从待加密字符串中取出一个字符
BLowData = AscB(MidB(StrChar, 1, 1)) Xor Key1'取字符的低字节和Key1进行异或运算
SHigData = AscB(MidB(StrChar, 2, 1)) '取字符的高字节
StrEncrypt = StrEncrypt &ChrB(BLowData) &ChrB(BHigData)'将运算后的数据合成新的字符
Next i
Encrypt = KeyTemp &StrEncrypt
End FunctionPrivate Function Decrypt(ByVal StrSource As String) As String '解密
Dim BLowData As Byte
Dim BHigData As Byte
Dim i As Long
Dim k As Integer
Dim StrDecrypt As String
Dim StrChar As String
Dim KeyTemp As String
Dim Key1 As Byte
KeyTemp = Mid(StrSource, 1, 30)
Key1 = CByte(Mid(KeyTemp, 11, 1) &Mid(KeyTemp, 27, 1))
For i = 31 To Len(StrSource)
StrChar = Mid(StrSource, i, 1)'从待解密字符串中取出一个字符
BLowData = AscB(MidB(StrChar, 1, 1)) Xor Key1 '取字符的低字节和Key1进行异或运算
BHigData = AscB(MidB(StrChar, 2, 1)) '取字符的高字节
StrDecrypt = StrDecrypt &ChrB(BLowData) &ChrB(BHigData) '将运算后的数据合成新的字符
Next i
Decrypt = StrDecryptEnd Function
Private Sub Command2_Click()
MsgBox Decrypt(InputBox(""))
End SubPrivate Sub Command1_Click()
Text1.Text = Encrypt(InputBox(""))
End Sub
1.程序加密可结合AES算法,在程序运行中,通过外部芯片中的AES密钥,加密数据来验证双方的正确性,称之为对比认证。2.加密数据传输过程中,可通过AES加密后形成密文传输,到达安全端后再进行解密,实现数据传输安全控制。
3.综合1和2,当前高大上的方式是程序加密可进行移植到加密芯片,存储在加密芯片中,运行也在加密芯片内部运行,输入数据参数,返回执行结果,同时辅助以AES加密和认证,实现数据程序的全方位防护
AesCryptoServiceProvider 类.NET Framework 4.5 其他版本
使用高级加密标准 (AES) 算法的加密应用程序编程接口 (CAPI) 实现来执行对称加密和解密。
继承层次结构
System.Object
System.Security.Cryptography.SymmetricAlgorithm
System.Security.Cryptography.Aes
System.Security.Cryptography.AesCryptoServiceProvider
命名空间: System.Security.Cryptography
程序集: System.Core(在 System.Core.dll 中)
语法
C#C++F#VB
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public sealed class AesCryptoServiceProvider : Aes
AesCryptoServiceProvider 类型公开以下成员。
构造函数
显示: 继承 保护
名称 说明
公共方法 AesCryptoServiceProvider 初始化 AesCryptoServiceProvider 类的新实例。
页首
属性
显示: 继承 保护
名称 说明
公共属性 BlockSize 获取或设置加密 *** 作的块大小(以位为单位)。 (继承自 SymmetricAlgorithm。)
公共属性 FeedbackSize 获取或设置加密 *** 作的反馈大小(以位为单位)。 (继承自 SymmetricAlgorithm。)
公共属性 IV 获取或设置对称算法的初始化向量 (IV)。 (继承自 SymmetricAlgorithm。)
公共属性 Key 获取或设置用于加密和解密的对称密钥。 (重写 SymmetricAlgorithm.Key。)
公共属性 KeySize 获取或设置密钥的大小(以位为单位)。 (重写 SymmetricAlgorithm.KeySize。)
公共属性 LegalBlockSizes 获取对称算法支持的块大小(以位为单位)。 (继承自 SymmetricAlgorithm。)
公共属性 LegalKeySizes 获取对称算法支持的密钥大小(以位为单位)。 (继承自 SymmetricAlgorithm。)
公共属性 Mode 获取或设置对称算法的运算模式。 (继承自 SymmetricAlgorithm。)
公共属性 Padding 获取或设置对称算法中使用的填充模式。 (继承自 SymmetricAlgorithm。)
页首
方法
显示: 继承 保护
名称 说明
公共方法 Clear 释放 SymmetricAlgorithm 类使用的所有资源。 (继承自 SymmetricAlgorithm。)
公共方法 CreateDecryptor() 使用当前的密钥和初始化向量 (IV) 创建对称 AES 解密器对象。 (重写 SymmetricAlgorithm.CreateDecryptor()。)
公共方法 CreateDecryptor(Byte[], Byte[]) 使用指定的密钥和初始化向量 (IV) 创建对称 AES 解密器对象。 (重写 SymmetricAlgorithm.CreateDecryptor(Byte[], Byte[])。)
公共方法 CreateEncryptor() 使用当前的密钥和初始化向量 (IV) 创建对称 AES 加密器对象。 (重写 SymmetricAlgorithm.CreateEncryptor()。)
公共方法 CreateEncryptor(Byte[], Byte[]) 使用指定的密钥和初始化向量 (IV) 创建对称加密器对象。 (重写 SymmetricAlgorithm.CreateEncryptor(Byte[], Byte[])。)
公共方法 Dispose() 释放由 SymmetricAlgorithm 类的当前实例占用的所有资源。 (继承自 SymmetricAlgorithm。)
公共方法 Equals(Object) 确定指定的对象是否等于当前对象。 (继承自 Object。)
公共方法 GenerateIV 生成用于该算法的随机初始化向量 (IV)。 (重写 SymmetricAlgorithm.GenerateIV()。)
公共方法 GenerateKey 生成用于该算法的随机密钥。 (重写 SymmetricAlgorithm.GenerateKey()。)
公共方法 GetHashCode 作为默认哈希函数。 (继承自 Object。)
公共方法 GetType 获取当前实例的 Type。 (继承自 Object。)
公共方法 ToString 返回表示当前对象的字符串。 (继承自 Object。)
公共方法 ValidKeySize 确定指定的密钥大小对当前算法是否有效。 (继承自 SymmetricAlgorithm。)
页首
备注
说明说明
应用到HostProtectionAttribute 此类型或成员的特性具有以下Resources 属性值:MayLeakOnAbort。这HostProtectionAttribute 不影响桌面应用程序(通常通过双击图标、键入命令或在浏览器中输入 URL 来启动这些应用程序)。有关更多信息,请参见HostProtectionAttribute 类或SQL Server 编程和宿主保护特性.
示例
下面的示例演示如何使用 AesCryptoServiceProvider 类加密和解密示例数据。
C#VB
using System
using System.IO
using System.Security.Cryptography
namespace Aes_Example
{
class AesExample
{
public static void Main()
{
try
{
string original = "Here is some data to encrypt!"
// Create a new instance of the AesCryptoServiceProvider
// class. This generates a new key and initialization
// vector (IV).
using (AesCryptoServiceProvider myAes = new AesCryptoServiceProvider())
{
// Encrypt the string to an array of bytes.
byte[] encrypted = EncryptStringToBytes_Aes(original, myAes.Key, myAes.IV)
// Decrypt the bytes to a string.
string roundtrip = DecryptStringFromBytes_Aes(encrypted, myAes.Key, myAes.IV)
//Display the original data and the decrypted data.
Console.WriteLine("Original: {0}", original)
Console.WriteLine("Round Trip: {0}", roundtrip)
}
}
catch (Exception e)
{
Console.WriteLine("Error: {0}", e.Message)
}
}
static byte[] EncryptStringToBytes_Aes(string plainText, byte[] Key, byte[] IV)
{
// Check arguments.
if (plainText == null || plainText.Length <= 0)
throw new ArgumentNullException("plainText")
if (Key == null || Key.Length <= 0)
throw new ArgumentNullException("Key")
if (IV == null || IV.Length <= 0)
throw new ArgumentNullException("Key")
byte[] encrypted
// Create an AesCryptoServiceProvider object
// with the specified key and IV.
using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider())
{
aesAlg.Key = Key
aesAlg.IV = IV
// Create a decrytor to perform the stream transform.
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV)
// Create the streams used for encryption.
using (MemoryStream msEncrypt = new MemoryStream())
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
//Write all data to the stream.
swEncrypt.Write(plainText)
}
encrypted = msEncrypt.ToArray()
}
}
}
// Return the encrypted bytes from the memory stream.
return encrypted
}
static string DecryptStringFromBytes_Aes(byte[] cipherText, byte[] Key, byte[] IV)
{
// Check arguments.
if (cipherText == null || cipherText.Length <= 0)
throw new ArgumentNullException("cipherText")
if (Key == null || Key.Length <= 0)
throw new ArgumentNullException("Key")
if (IV == null || IV.Length <= 0)
throw new ArgumentNullException("IV")
// Declare the string used to hold
// the decrypted text.
string plaintext = null
// Create an AesCryptoServiceProvider object
// with the specified key and IV.
using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider())
{
aesAlg.Key = Key
aesAlg.IV = IV
// Create a decrytor to perform the stream transform.
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV)
// Create the streams used for decryption.
using (MemoryStream msDecrypt = new MemoryStream(cipherText))
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
// Read the decrypted bytes from the decrypting stream
// and place them in a string.
plaintext = srDecrypt.ReadToEnd()
}
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)