从文件生成指定数量的字节键

时间:2011-12-16 15:20:02

标签: asp.net encryption

我知道我们可以使用以下行明确定义密钥。对于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 个答案:

答案 0 :(得分:1)

  1. 只需在解码后使用NewKey.Length检查数组的长度
  2. 使用TripleDES.GenerateKey,检索密钥属性。这将生成应与TripleDES兼容的密钥,然后调用Converter.ToBase64String
  3. 请查阅自己创建/阅读文本文件的教程,在文件名上使用FromBase64String将无效。

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

    请注意,16字节键可用于TripleDES(ABA键)以及24字节(ABC)键。另请注意,DES中存在弱密钥,并且密钥包括奇偶校验位。大多数实现只是忽略奇偶校验位,但最好使用特殊的密钥生成函数来确保它们设置正确。

答案 1 :(得分:-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();
        }
    }
}