簡體   English   中英

使用Rijndael加密和解密字符串

[英]Encrypting and decrypting a string using Rijndael

在開始之前,我知道有很多關於stackoverflow的類似問題,但是大多數答案都是由很大一部分代碼組成的,沒有任何解釋或幫助用戶。

我需要做的很簡單,先從用戶輸入一個字符串,然后輸入密碼,然后用密碼對字符串進行加密,然后將密文寫入文件中。 然后,在以后用戶需要時,從文件中讀取密文並解密,然后向用戶提供原始的純文本。 我可以處理文件的寫入和寫入操作,我只需要有關字符串加密的幫助。 (注意:我不想只加密/解密整個文件-因為它必須包含一些未加密的內容-程序中只是一個字符串)

此外,還需要“初始化向量”-它可以與密碼相同嗎? 還是可以將其簡單地硬編碼到程序中? 它甚至對安全性至關重要嗎? 如果不是,那么用戶是否必須記住密碼和IV?

另一件事,當用戶解密並輸入錯誤的密碼時,Rijndael類中的方法會引發錯誤還是什么?

我精通C#,但是我對密碼學是陌生的,因此,如果您能單步執行任何代碼或回答您,我將不勝感激。

謝謝

大多數Rijndael模式都需要IV,通常只需將其添加到密文之前,無需用戶記住。

由於您使用的是用戶鍵入的密碼進行解密,因此您想使用“ 身份驗證加密”,以便在輸入錯誤密碼后程序可以安全地重新提示,否則您的程序可能不會給出任何提示,表明存在問題並吐出了隨機文本。

我有一個使用HMAC-SHA256身份驗證的AES-CBC的示例,我嘗試對其進行更新並進行了審查,實際上它具有一個僅使用純文本和密碼來處理加密的輔助方法,並且也受到了很好的評論:

字符串的對稱身份驗證加密的現代示例。 C#

您需要執行以下步驟:

  1. 根據密碼計算密鑰。 您需要生成8個字節的隨機鹽和一個迭代計數作為基於密碼的密鑰派生函數(PBKDF)(例如PBKDF2)的輸入;
  2. 使用任何編碼(例如UTF-8)對字符串進行編碼,為您的密碼提供明文;
  3. 使用PKCS#7填充創建密碼,例如CBC模式下的AES-128;
  4. 創建一個隨機IV,應為以字節為單位的塊大小(因此對於AES,將為16字節);
  5. 使用給定的密碼對您的明文進行加密,從而為您提供密文;
  6. 存儲鹽,IV和密文-如果需要字符串,則可以使用諸如Base64之類的編碼。

PBKDF2在Rfc2898DeriveBytes實現。

請注意,此答案僅顯示如何獲得機密性,而不顯示完整性或真實性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM