VB   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在VB.Net中进行简单的加密/解密大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图找出如何在VB.Net中加密/解密字符串.

我按照给出的示例给出了here并编写了以下代码(如下).有一个文本框,一个“加密”按钮和一个“解密”按钮.想法是在文本框中键入内容(“喜欢’Hello world’”),单击“加密”,然后在文本框中看到加密版本.单击“解密”应该会将您带回原始字符串.

但是当我尝试加密时,当我尝试“FlushFinalBlock”时出现错误.错误是:“要加密的数据长度无效”.

“解密”部分是黑暗中的总镜头,因为上面引用的示例仅涉及加密,而不是解密.我确定这是错的,但由于我无法“加密”工作,我还没有测试过.

谁能告诉我为什么这不起作用?

Imports System.Data.SqlClient
Imports System.IO
Imports System.Security.Cryptography

Public Class Form1

  Private cryptObj As RijndaelManaged
  Private KEY_128 As Byte() = {42,1,52,67,231,13,94,101,123,6,12,32,91,4,111,31,70,21,141,142,234,82,95,129,187,162,55,98,23}
  Private IV_128 As Byte() = {234,44,214,222,200,109,2,45,76,88,53,23,78}
  Private enc As System.Text.UTF8Encoding = New System.Text.UTF8Encoding()

  Private Sub btnEncrypt_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles btnEncrypt.Click
    Dim sPlaintext As String = Me.TextBox1.Text
    If Not String.IsNullOrEmpty(sPlaintext) Then
      Dim bPlaintext As Byte() = Me.enc.GetBytes(Me.TextBox1.Text)
      Dim ms As MemoryStream = New MemoryStream()
      Dim cs As CryptoStream = New CryptoStream(ms,cryptObj.CreateEncryptor(),CryptoStreAMMode.WritE)
      cs.Write(bPlaintext,sPlaintext.Length)
      cs.FlushFinalBlock()
      Me.TextBox1.Text = Me.enc.GetString(ms.ToArray())
    End If
  End Sub

  Private Sub btnDecrypt_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles btnDecrypt.Click
    Dim sCipherText = Me.TextBox1.Text
    Dim ms As MemoryStream = New MemoryStream()
    Dim cs As CryptoStream = New CryptoStream(ms,cryptObj.CreateDecryptor(),CryptoStreAMMode.Read)
    cs.Read(Me.enc.GetBytes(sCipherText),sCipherText.Length)
    Me.TextBox1.Text = Me.enc.GetString(ms.ToArray())
  End Sub

  Private Sub Form1_Load(ByVal sender As Object,ByVal e As System.EventArgs) Handles Me.Load
    Me.cryptObj = New RijndaelManaged()
    Me.cryptObj.blockSize = 128
    Me.cryptObj.KeySize = 128
    Me.cryptObj.Mode = CipherMode.ECB
    Me.cryptObj.Padding = PaddingMode.None
    Me.cryptObj.Key = KEY_128
    Me.cryptObj.IV = IV_128
  End Sub

End Class
最终我找到了答案:

http://www.obviex.com/samples/Encryption.aspx

他的例子似乎有点过于复杂.我敢肯定它代表了一个更通用和灵活的情况,但我能够取消“saltPhrase”,“initVector”和“passwordDeriveBytes”的使用,显然已被弃用了,但我也避免了它被命名为替换:Rfc2898DeriveBytes.

以下内容允许您输入任意长度的字符串,对其进行加密并重新解密.

Imports System.Data.SqlClient
Imports System.IO
Imports System.Security.Cryptography

Public Class Form1

  Private enc As System.Text.UTF8Encoding
  Private encryptor As ICryptoTransform
  Private decryptor As ICryptoTransform

  Private Sub btnEncrypt_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles btnEncrypt.Click
    Dim sPlaintext As String = Me.TextBox1.Text
    If Not String.IsNullOrEmpty(sPlaintext) Then
      Dim memoryStream As MemoryStream = New MemoryStream()
      Dim cryptoStream As CryptoStream = New CryptoStream(memoryStream,Me.encryptor,CryptoStreAMMode.WritE)
      cryptoStream.Write(Me.enc.GetBytes(sPlaintext),sPlaintext.Length)
      cryptoStream.FlushFinalBlock()
      Me.TextBox1.Text = Convert.ToBase64String(memoryStream.ToArray())
      memoryStream.Close()
      cryptoStream.Close()
    End If
  End Sub

  Private Sub btnDecrypt_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles btnDecrypt.Click
    Dim cypherTextBytes As Byte() = Convert.FromBase64String(Me.TextBox1.Text)
    Dim memoryStream As MemoryStream = New MemoryStream(cypherTextBytes)
    Dim cryptoStream As CryptoStream = New CryptoStream(memoryStream,Me.decryptor,CryptoStreAMMode.Read)
    Dim plaintextBytes(cypherTextBytes.Length) As Byte
    Dim decryptedByteCount As Integer = cryptoStream.Read(plaintextBytes,plaintextBytes.Length)
    memoryStream.Close()
    cryptoStream.Close()
    Me.TextBox1.Text = Me.enc.GetString(plaintextBytes,decryptedByteCount)
  End Sub

  Private Sub Form1_Load(ByVal sender As Object,ByVal e As System.EventArgs) Handles Me.Load
    Dim KEY_128 As Byte() = {42,23}
    Dim IV_128 As Byte() = {234,78}
    Dim symmetricKey As RijndaelManaged = New RijndaelManaged()
    symmetricKey.Mode = CipherMode.CBC

    Me.enc = New System.Text.UTF8Encoding
    Me.encryptor = symmetricKey.CreateEncryptor(KEY_128,IV_128)
    Me.decryptor = symmetricKey.CreateDecryptor(KEY_128,IV_128)
  End Sub

End Class

大佬总结

以上是大佬教程为你收集整理的在VB.Net中进行简单的加密/解密全部内容,希望文章能够帮你解决在VB.Net中进行简单的加密/解密所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。