本文介绍了为什么TripleDES.Create(),关键不是这个算法有效的大小?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我需要解密用不同势键
I文本还需要genreate在后面的代码有效密钥的情况下。



我用这条线来产生。一键

  VAR键= Encoding.UTF8.GetString(TripleDES.Create()键。); 



但不能使用这种方法的关键。它说:指定的密钥不是这个算法有效大小



如何解决这种情况呢?



 公共类CryptoHelper 
{
公共字符串加密(字符串toEncrypt,串键)
{
VAR toEncryptArray = Encoding.UTF8.GetBytes( toEncrypt);
VAR keyArray = Encoding.UTF8.GetBytes(键);

变种TDES =新TripleDESCryptoServiceProvider {重点= keyArray,模式= CipherMode.ECB,填充= PaddingMode.PKCS7};

VAR cTransform = tdes.CreateEncryptor();
变种resultArray = cTransform.TransformFinalBlock(toEncryptArray,0,toEncryptArray.Length);
tdes.Clear();

返回Convert.ToBase64String(resultArray,0,resultArray.Length);
}

公共字符串解密(字符串cipherString,串键)
{
VAR toEncryptArray = Convert.FromBase64String(cipherString.Replace('','+') );
VAR keyArray = Encoding.UTF8.GetBytes(键);
变种TDES =新TripleDESCryptoServiceProvider {重点= keyArray,模式= CipherMode.ECB,填充= PaddingMode.PKCS7};

VAR cTransform = tdes.CreateDecryptor();
变种resultArray = cTransform.TransformFinalBlock(toEncryptArray,0,toEncryptArray.Length);
tdes.Clear();

返回Encoding.UTF8.GetString(resultArray);
}
}


解决方案

如果你写一个小测试,你的问题变得很明显,

  VAR失败= ParallelEnumerable.Range(0,10000).Count之间(我= GT; 
{
VAR keyBefore = TripleDES.Create()键;
VAR keyAfter = Encoding.UTF8.GetBytes(Encoding.UTF8.GetString(keyBefore));
返回keyBefore.SequenceEqual(keyAfter);!
});

在我的测试中,每一个试图往返失败。这证实了达明的评论。



The keyAfter is (almost) always somewhat expanded, sometimes doubled in length. In fact, I'm unable to fluke a key that is round trippable, this may have something to do with avoiding weak keys.


However, if i try

var failures = ParallelEnumerable.Range(0, 10000).Count(i =>
    {
        var keyBefore = TripleDES.Create().Key;
        var keyAfter = Convert.FromBase64String(Convert.ToBase64String(keyBefore));
        return !keyBefore.SequenceEqual(keyAfter);
    });

failures always equals 0, as expected. So, there is a simple solution.

这篇关于为什么TripleDES.Create(),关键不是这个算法有效的大小?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-12 10:14