2016-02-18 166 views
1

所以我有一個使用模數加密的系統。VB.NET加密和解密

加密沒有問題,但字符串的解密不會回覆到原始字符串。

這裏被用於加密

modByte(i) + modKey Mod 255 

和用於解密的,這將是 modByte(ⅰ)我的式 - modKey國防部255

例如:ⅰ輸入快速棕色狐狸躍過懶狗。並把密鑰作爲254 here is what happens

這就是我解密它時發生的事情。 PS。我改變了配方的加密按鈕 enter image description here 這是我對加密按鈕的代碼

 Dim counter As Integer = 0 
    If mod_TB_key.Text = "" Then 
     MessageBox.Show("Pls Input Modulo Key Value", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 
    Else 
     modKey = mod_TB_key.Text 
    End If 

    'modModulo = modKey Mod 255 
    mod_TB_mod.Text = modModulo 

    For i = 0 To modByte.GetUpperBound(0) 
     counter += 1 
     ReDim Preserve modConverted(counter - 1) 
     modConverted(counter - 1) = (modByte(i) + modKey) Mod 255 'formula used 
    Next 
    mod_Tb_enc.Text = String.Join(" ", modConverted) 
    For i = 0 To modConverted.GetUpperBound(0) 
     counter += 1 
     ReDim Preserve modchar(counter - 1) 
     modchar(counter - 1) = ChrW(modConverted(i)) 
     mod_TB_encText.Text = mod_TB_encText.Text & (modchar(counter - 1)) 
    Next 

解密也有相同的代碼,而唯一改變的事情就是用「modByte(I)的公式 - modKey國防部255「將」+「改爲」 - 「。

這是我的代碼爲 「轉換」

Dim counter As Integer = 0 
    modValue = mod_TB_Input.Text 
    For Each ch As Char In modValue 
     counter += 1 
     ReDim Preserve modByte(counter - 1) 
     modByte(counter - 1) = Asc(ch) 
    Next 

    mod_TB_convert.Text = String.Join(" ", modByte) 
+1

側面說明:'國防部255'似乎不那麼正確的,因爲你有隻從'範圍0-254'的值時,你失去了'255'不知道的範圍內。數據允許你容忍在你的情況下丟失'255' – Ian

+0

@Ian但網站上的ascii圖表範圍從0-255 但字符從3開始2到255 – dadadadaryl

+0

你知道'255 Mod 255'產生'0',不是嗎? – Ian

回答

0

你有

  1. 的差一錯誤(從你的MOD 255,我覺得(謝謝伊恩))
  2. 你在.net中不使用ASCII,而使用UTF8,因此,負數是有效值。

你需要「修復」由要麼在做byte所有的運算(這是正確的類型與ASCII的工作,或者你完成轉換之後,您可以用鑷子值回byte代碼。

If modConverted(counter - 1) < 0 Then 
    modConverted(counter - 1) = modConverted(counter - 1) + 255 
End if 
+0

'昏暗計數器爲整數= 0 modValue = mod_TB_Input.Text 對於各自爲CH爲CHAR在modValue 計數器+ = 1 使用ReDim保留modByte(計數器 - 1) modByte(計數器 - 1)=升序(CH) 下一頁 mod_TB_convert.Text = String.Join(「」,modByte)' 在我做加密之前,我先使用這些代碼將它轉換爲ascii。 – dadadadaryl

+0

@dadadadaryl您可能會將輸入文本轉換爲ASCII,但是您將「Integer」轉換爲UTF8。你不應該使用帶ASCII的'Integer'。或者說,你不應該在Integer中使用'char -x Mod 256',因爲你會得到一個負數,然後被解釋爲Unicode字符而不是UTF8中的ASCII字符。 – Aron

+0

我以後還可以問這裏嗎?我會重寫我的代碼,我會嘗試使用字節。 – dadadadaryl