2011-12-16 2 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? Для использования в качестве ключа для 3ds cryptoservice provider. Подобно TripleDESCryptoServiceProvider cryptoProvider = new TripleDESCryptoServiceProvider(); X509Certificate2 cert = new X509Certificate2 (@ "c: \ temp \ whatever.cer"); cryptoProvider.Key = cert.PublicKey.Key. – Suresh

+1

Downvoted, поскольку он лишь частично охватывает вопрос и вводит hex из ниоткуда, не содержит пояснительного текста или комментариев и т. Д. –