2008-11-05 173 views
-1

如何着手對GUID執行AES加密?AES加密,示例代碼

在客戶端計算機上,我們將存儲一個GUID及其公鑰,而我們的內部服務器將擁有私鑰和它們的GUID。

這是生成AES加密的所有必要輸入嗎?

回答

8

AES是一種對稱加密算法(加密和解密密鑰是一樣的)。如果你正在談論公鑰和私鑰,你需要一個asymmetric encryption algorithm,比如RSA。

+0

依我看他使用PKI客戶端 - 服務器交互,需要存儲相關的公鑰和私鑰。雖然在這種情況下不是完全標準的做法,但AES是保護PKI密鑰的合理方法。 – 2008-11-05 14:59:15

0

這裏的字符串數據的使用AES(Rijndael算法)快速加密/解密:

private static readonly byte[] rgbKey = Encoding.UTF8.GetBytes("[email protected]"); // change to your own secure key 

private static readonly byte[] rgbIv = Encoding.UTF8.GetBytes("to$eO_e!maI*o3ut"); // change to your own secure initialization vector 

public static string Encrypt(string originalString) 
{ 
    if (string.IsNullOrEmpty(originalString)) 
    { 
     throw new ArgumentNullException(
      "originalString", 
      "The string which needs to be encrypted can not be null."); 
    } 

    using (var cryptoProvider = new RijndaelManaged()) 
    using (var memoryStream = new MemoryStream()) 
    using (var encryptor = cryptoProvider.CreateEncryptor(rgbKey, rgbIv)) 
    using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write)) 
    using (var writer = new StreamWriter(cryptoStream)) 
    { 
     writer.Write(originalString); 
     writer.Flush(); 
     cryptoStream.FlushFinalBlock(); 
     writer.Flush(); 
     return Convert.ToBase64String(memoryStream.GetBuffer(), 0, (int)memoryStream.Length); 
    } 
} 

public static string Decrypt(string encryptedString) 
{ 
    if (string.IsNullOrEmpty(encryptedString)) 
    { 
     throw new ArgumentNullException(
      "encryptedString", 
      "The string which needs to be decrypted can not be null."); 
    } 

    using (var cryptoProvider = new RijndaelManaged()) 
    using (var memoryStream = new MemoryStream(Convert.FromBase64String(encryptedString))) 
    using (var decryptor = cryptoProvider.CreateDecryptor(rgbKey, rgbIv)) 
    using (var cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read)) 
    using (var reader = new StreamReader(cryptoStream)) 
    { 
     return reader.ReadToEnd(); 
    } 
} 
+0

什麼是默認密碼模式? – 2008-11-05 15:13:35

+0

密碼塊鏈接。據我所知,這是所有SymmetricAlgorithm後代的默認值。 – 2008-11-05 15:39:37

1

您可以加密任何可以被表示爲字節流。從你的問題的「良方」唯一缺少的成分是加密密鑰:

void encrypt(char *plaintext, char *key, char *crypt) 
{ 
    // Encrypt plaintext with the key, returning the result in crypt. 

} 

注:

  • 使用PKI(公鑰/私鑰),每個參與者通常維護自己的私密鑰匙以安全的方式,並免費分配其公衆鑰匙。消息使用公鑰密鑰收件人加密,並由每個收件人用專用密鑰解密。從問題的表述來看,你使用這個模型並不明顯。

  • 傑西爲演示提供了一個很好的例子。只要記住,你可能不希望在生產應用程序硬編碼鍵..