Encryption TripleDES类和TripleDESCryptoServiceProvider类之间的差异
我试图理解三重加密的简单代码,看看它是如何工作的。我在谷歌上看到了很多代码。他们中有些人使用class,有些人使用class。据我所知,第二个是从第一个继承来的 TripleDES类:(仅显示加密部分) 和TripleDESCryptoServiceProvider类:(仅加密代码) 这两种代码工作正常,99%相同。但我的问题是Encryption TripleDES类和TripleDESCryptoServiceProvider类之间的差异,encryption,cryptography,tripledes,Encryption,Cryptography,Tripledes,我试图理解三重加密的简单代码,看看它是如何工作的。我在谷歌上看到了很多代码。他们中有些人使用class,有些人使用class。据我所知,第二个是从第一个继承来的 TripleDES类:(仅显示加密部分) 和TripleDESCryptoServiceProvider类:(仅加密代码) 这两种代码工作正常,99%相同。但我的问题是 这两门课有什么不同 哪一类更容易接受 TransformFinalBlock()和FlushFinalBlock()之间有什么区别 有些代码不使用MemoryStrea
TripleDESCryptoServiceProvider
使用CSP,一种加密服务提供商,它可以是一种软件实现,但也可以表示智能卡上的实现TripleDescriptionServiceProvider
;这使得切换CSP成为可能(为了增加安全性或速度)FlushFinalBlock
是TransformFinalBlock
的流版本。它表示可以对流中已经存在的数据执行最后一次计算。TransformFinalBlock也执行最后一次计算,但使用给定数据并返回实际结果TripleDESCryptoServiceProvider
使用CSP,一种加密服务提供商,它可以是一种软件实现,但也可以表示智能卡上的实现TripleDescriptionServiceProvider
;这使得切换CSP成为可能(为了增加安全性或速度)FlushFinalBlock
是TransformFinalBlock
的流版本。它表示可以对流中已经存在的数据执行最后一次计算。TransformFinalBlock也执行最后一次计算,但使用给定数据并返回实际结果猫头鹰,非常感谢你的回答。特别是第四个答案真的派上了用场。但是,在第二个答案中,你说“这使得切换CSP成为可能(为了增加安全性或速度)。”---你能解释一下吗?我想知道有多少CSP,它们是什么。(希望你不是指AESCryptoServiceProvider或DESCryptoServiceProvider……等等)它是一个插件结构,因此可以用来切换实现,而不是使用与接口相同的类的算法(很像Java JCA/JCE,这并不奇怪)。要在特定算法之间切换,应使用基类
SymmetricAlgorithm
。通常使用的CSP当然使用Windows密钥存储和软件实现。更多信息Owlstead,非常感谢你的回答。特别是第四个答案真的派上了用场。但是,在第二个答案中,你说“这使得切换CSP成为可能(为了增加安全性或速度)。”---你能解释一下吗?我想知道有多少CSP,它们是什么。(希望你不是指AESCryptoServiceProvider或DESCryptoServiceProvider……等等)它是一个插件结构,因此可以用来切换实现,而不是使用与接口相同的类的算法(很像Java JCA/JCE,这并不奇怪)。要在特定算法之间切换,应使用基类SymmetricAlgorithm
。通常使用的CSP当然使用Windows密钥存储和软件实现。更多信息
static void Main(string[] args)
{
TripleDES TripleDESalg = TripleDES.Create("TripleDES");
string sData = "Here is some data to encrypt.";
byte[] Data = EncryptTextToMemory(sData, TripleDESalg.Key, TripleDESalg.IV);
string Final = DecryptTextFromMemory(Data, TripleDESalg.Key, TripleDESalg.IV);
Console.WriteLine(Final);
Console.ReadLine();
}
public static byte[] EncryptTextToMemory(string Data, byte[] Key, byte[] IV)
{
MemoryStream mStream = new MemoryStream();
TripleDES tripleDESalg = TripleDES.Create();
CryptoStream cStream = new CryptoStream(mStream, tripleDESalg.CreateEncryptor(Key, IV), CryptoStreamMode.Write);
byte[] toEncrypt = new ASCIIEncoding().GetBytes(Data);
cStream.Write(toEncrypt, 0, toEncrypt.Length);
cStream.FlushFinalBlock();
byte[] ret = mStream.ToArray();
cStream.Close();
mStream.Close();
return ret;
}
static void Main(string[] args)
{
TripleDESCryptoServiceProvider tDESalg = new TripleDESCryptoServiceProvider();
string sData = "Here is some data to encrypt.";
byte[] Data = EncryptTextToMemory(sData, tDESalg.Key, tDESalg.IV);
string Final = DecryptTextFromMemory(Data, tDESalg.Key, tDESalg.IV);
Console.WriteLine(Final);
Console.ReadLine();
}
public static byte[] EncryptTextToMemory(string Data, byte [] key, byte[] iv)
{
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream,
new TripleDESCryptoServiceProvider().CreateEncryptor(key, iv ),
CryptoStreamMode.Write);
byte[] toEncrypt = new ASCIIEncoding().GetBytes(Data);
cStream.Write(toEncrypt, 0, toEncrypt.Length);
cStream.FlushFinalBlock();
byte[] ret = mStream.ToArray();
cStream.Close();
mStream.Close();
return ret;
}