none
關於字串解密問題 RRS feed

  • 問題

  • 在論壇看了很多字串加密文章 

    下面為論壇中看到的 當然正確的解密不會有什麼問題

    但如果隨便輸入解密就照成出錯 有辦法即使隨便輸入 也不錯照成出錯 就顯示"無法解密"嗎

    Imports System
    Imports System.IO
    Imports System.Security
    Imports Cry = System.Security.Cryptography
    Imports System.Runtime.InteropServices
    Imports System.Text

    Public Class Form1
        Dim S As String


        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            'Dim desCrypto As DESCryptoServiceProvider = DESCryptoServiceProvider.Create()
            Dim I(), O() As Byte
            Dim sKey As String

            Dim DES As New Cry.DESCryptoServiceProvider()
            sKey = "TEST1234"
            DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey)
            DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)
            Dim Encode As Cry.ICryptoTransform = DES.CreateEncryptor()

            I = Encoding.Unicode.GetBytes(TextBox1.Text.Trim)
            O = Encode.TransformFinalBlock(I, 0, I.Length)

            TextBox2.Text = Encoding.Unicode.GetString(O)

            'S = Encoding.Unicode.GetString(O)
        End Sub

     

        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Dim I(), O() As Byte
            Dim sKey As String

            Dim DES As New Cry.DESCryptoServiceProvider()
            sKey = "TEST1234" 'RTrim(TextBox1.Text)
            DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey)
            DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)

            Dim Decode As Cry.ICryptoTransform = DES.CreateDecryptor()

            I = Encoding.Unicode.GetBytes(TextBox2.Text)
            'I = Encoding.Unicode.GetBytes(S)
            O = Decode.TransformFinalBlock(I, 0, I.Length)

            TextBox3.Text = Encoding.Unicode.GetString(O)

        End Sub

    End Class

    2015年1月3日 下午 02:58

解答

  • 解密是依據演算法將每 8 bytes 重新混合,所以對電腦來說,你輸入錯的解碼向量,只是會造成解密結果變成另一字串。

    也就是說另一字串用相同的解碼向量加密後,就是原來的位元組。

    因此你需要自行加入判讀字串後混合加密與解密,比如說:

    00密碼00

    解密完檢查前後有無 00 ,常用的是不可顯示字元,例如 Chr(0)


    T.L. Cheng

    2015年11月7日 上午 07:07
    版主
  • 隨便輸出就產生無法解密的話...捕捉 CryptographicException 不就好了?

    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    • 已標示為解答 有夢最美 2015年11月14日 上午 05:52
    2015年11月9日 上午 02:20
    版主

所有回覆

  • 解密是依據演算法將每 8 bytes 重新混合,所以對電腦來說,你輸入錯的解碼向量,只是會造成解密結果變成另一字串。

    也就是說另一字串用相同的解碼向量加密後,就是原來的位元組。

    因此你需要自行加入判讀字串後混合加密與解密,比如說:

    00密碼00

    解密完檢查前後有無 00 ,常用的是不可顯示字元,例如 Chr(0)


    T.L. Cheng

    2015年11月7日 上午 07:07
    版主
  • 隨便輸出就產生無法解密的話...捕捉 CryptographicException 不就好了?

    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    • 已標示為解答 有夢最美 2015年11月14日 上午 05:52
    2015年11月9日 上午 02:20
    版主