2011-12-16 60 views
0

我知道我們可以使用下面的行明確定義密鑰。對於3des,如果我沒有錯,密鑰長度應該是24個字節。從文件生成指定數量的字節密鑰

Dim Newkey() As Byte = Convert.FromBase64String("24 bytes enter here") 

Dim Newkey() As Byte = Convert.FromBase64String("c:\temp\mykey.pem") 
  1. 我如何確保該文件還給24個字節的數據,用於3DES加密?
  2. 什麼/我如何生成這樣的文件?

回答

1
  1. 只需檢查使用NewKey.Length數組的長度進行解碼
  2. 使用TripleDES.GenerateKey後,檢索的關鍵屬性。這將生成密鑰,應該是與TripleDes的兼容,然後調用Converter.ToBase64String

請查找創建的教程/閱讀文本文件的自己,用一個文件名FromBase64String將無法正常工作。

http://msdn.microsoft.com/en-us/library/system.security.cryptography.symmetricalgorithm.generatekey.aspx#Y0

注意,16級字節的密鑰可以被用於TripleDes的(ABA鍵)以及24字節(ABC)的鍵。還要注意,DES中存在弱密鑰,並且密鑰包括奇偶校驗位。大多數實現都忽略奇偶校驗位,但最好使用特殊的密鑰生成函數來確保它們設置正確。

-2
using System; 
using System.Text; 
using System.Security.Cryptography; 

namespace Crypto 
{ 
    public class KeyCreator 
    { 
     public static void Main(String[] args) 
     {   
      String[] commandLineArgs = System.Environment.GetCommandLineArgs(); 
      string decryptionKey = CreateKey(System.Convert.ToInt32(commandLineArgs[1])); 
      string validationKey = CreateKey(System.Convert.ToInt32(commandLineArgs[2])); 

      Console.WriteLine("<machineKey validationKey=\"{0}\" decryptionKey=\"{1}\" validation=\"SHA1\"/>", validationKey, decryptionKey); 
     } 

     static String CreateKey(int numBytes) 
     { 
      RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider(); 
      byte[] buff = new byte[numBytes]; 

      rng.GetBytes(buff); 
      return BytesToHexString(buff); 
     } 

     static String BytesToHexString(byte[] bytes) 
     { 
      StringBuilder hexString = new StringBuilder(64); 

      for (int counter = 0; counter < bytes.Length; counter++) 
      { 
       hexString.Append(String.Format("{0:X2}", bytes[counter])); 
      } 
      return hexString.ToString(); 
     } 
    } 
} 
+0

我如何創建一個cer文件,以便它返回的原始字節是24?用作3des密碼服務提供商的密鑰。像TripleDESCryptoServiceProvider cryptoProvider = new TripleDESCryptoServiceProvider(); X509Certificate2 cert = new X509Certificate2(@「c:\ temp \ whatever.cer」); cryptoProvider.Key = cert.PublicKey.Key。 – Suresh 2011-12-17 04:27:45