Генерировать указанное количество байтов ключа из файла - PullRequest
0 голосов
/ 16 декабря 2011

Я знаю, что мы можем определить ключ явно, используя строку ниже.Для 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. Что / Как мне создать такой файл?

Ответы [ 2 ]

1 голос
/ 17 декабря 2011
  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 есть слабые ключи, и эти ключи содержат биты четности. Большинство реализаций просто игнорируют биты четности, но лучше использовать специальную функцию генерации ключей, чтобы убедиться, что они установлены правильно.

0 голосов
/ 16 декабря 2011
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();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...