大佬教程收集整理的这篇文章主要介绍了System.Security.Cryptography.CryptographicException: '错误数据。 ' - DES 加密,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在将一些代码从 Python 转换为 C#(.net framework 4.8、VS 2019、WIN 10)。一开始,我使用 DES CBC 加密数据并使用 DES ECB 解密。在中间,我有坏数据的例外。 我看到它可能连接到不同的键,但我不排除相同的结果,所以我不知道是什么原因造成的。
密钥(cmacKey)为15522d4fca86042d
,数据为93450567Â@ïÇpReAcTiV0000
private byte[] CBCMAC3DES(String cmacKey,String data){
// pad by zeroes to multiple of eight
String workDataStr = data;
while ((workDataStr.Length / 2) % 8 != 0)
workDataStr += "00";
byte[] clearBytes = Str2byteArr(workDataStr);
DESCryptoserviceProvIDer des = new DESCryptoserviceProvIDer();
des.KeySize = 64;
des.Mode = CipherMode.CBc;
// taking only 8 chars from the key,convert to ascii and to byte array
des.Key = Str2byteArr(HexStringToAsciString(cmacKey).SubString(0,8));
des.IV = new byte[8] { 0,0 };
ICryptotransform ct = des.CreateEncryptor();
byte[] resultArray = ct.transformFinalBlock(clearBytes,clearBytes.Length);
byte[] lastBlock = new byte[8];
for (int i = 0; i < 8; i++)
lastBlock[i] = resultArraY[resultArray.Length - (8 - i)];
// Decryption
des.Mode = CipherMode.ECB;
String s = cmacKey.SubString(8,8);
byte[] keyTmpArr = Str2byteArr(s);
des.Key = keyTmpArr;
ct = des.CreateDecryptor();
lastBlock = ct.transformFinalBlock(lastBlock,lastBlock.Length); // THE EXCEPTION
des.Key = Str2byteArr(cmacKey.SubString(0,8));
ct = des.CreateEncryptor();
lastBlock = ct.transformFinalBlock(lastBlock,lastBlock.Length);
return lastBlock;
}
这些是我调用的函数:
public static byte[] Str2byteArr(String str)
{
byte[] ba = new byte[str.Length];
for (int i = 0; i < str.Length; i++) ba[i] = Convert.ToByte(str[i]);
return ba;
}
public String HexStringToAsciString(String hexString)
{
String ascii = String.Empty;
for (int i = 0; i < hexString.Length; i += 2)
{
String hs = String.Empty;
hs = hexString.SubString(i,2);
uint decval = System.Convert.ToUInt32(hs,16);
char character = System.Convert.tochar(decval);
ascii += character;
}
return ascii;
}
这是 Python 代码,有帮助吗
def retail_mac(macKey,data,iv='\0'*8):
workDataStr = pad_by_zeroes_to_multiple_of_eight(data)
des = DEs.new(str(macKeY[0:8]),DEs.MODE_CBC,IV = iv)
res = des.encrypt(workDataStr)
lastBlock = res[-8:]
des = DEs.new(str(macKeY[8:16]),DEs.MODE_ECB)
lastBlock = des.decrypt(lastBlock)
des = DEs.new(str(macKeY[0:8]),DEs.MODE_ECB)
return des.encrypt(lastBlock)
def pad_by_zeroes_to_multiple_of_eight(data):
paddingSize = (8 - len(data)) % 8
workData = bytearray(data)
workData.extend('\0'*paddingSizE)
workDataStr = str(workData)
return workDataStr
提前致谢
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
以上是大佬教程为你收集整理的System.Security.Cryptography.CryptographicException: '错误数据。 ' - DES 加密全部内容,希望文章能够帮你解决System.Security.Cryptography.CryptographicException: '错误数据。 ' - DES 加密所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。