我正在尝试实现我过去提出的这个问题Securely Encrypt 64bits w/o per element overhead?
在我进入的即时窗口中TripleDES.Create().LegalBlockSizes.First()
,我得到了
{System.Security.Cryptography.KeySizes}
MaxSize: 64
MinSize: 64
SkipSize: 0
64bits/8bits 每字节是 8bytes。long 的长度到底是多少。无论如何,我通过下面的代码运行它并抛出异常。块的长度为 16 字节。不是我想要的...我会问如何将其更改为 64 位,但结果表明最小值和最大值都是 64 位,那么为什么我要改为 128 位?
long enc(long v, byte[] iv)
{
using (var m = new MemoryStream())
{
using (var c = des.CreateEncryptor(des.Key, iv))
using (var s = new CryptoStream(m, c, CryptoStreamMode.Write))
{
var b = BitConverter.GetBytes(v);
s.Write(b, 0, b.Length);
}
m.Flush();
var arr = m.ToArray();
if(arr.Length!=8)
throw new Exception();
return BitConverter.ToInt64(arr, 0);
}
}