我正在尝试使用tripleDes解密数据。一切看起来都很好,但一开始有一些无效的字符?我究竟做错了什么?对于相同的数据,如果反复调用此函数,这些前几个字符总是不同,但其余数据是相同的。
我将useHashing传递给false。
public static byte[] GetTripleDesDecryption(string dataToDecrypt, byte[] key, bool useHashing)
{
byte[] keyArray;
byte[] plainbytes = null;
byte[] cipherbytes;
try
{
if (useHashing)
{
MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
keyArray = hashmd5.ComputeHash(key);
hashmd5.Clear();
}
else
keyArray = key;
using (TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider())
{
tdes.Key = keyArray;
tdes.Mode = CipherMode.CBC;
tdes.Padding = PaddingMode.None;
using (ICryptoTransform cTransform = tdes.CreateDecryptor())
{
cipherbytes = Convert.FromBase64String(dataToDecrypt);
plainbytes = cTransform.TransformFinalBlock(cipherbytes, 0, cipherbytes.Length);
}
}
}
catch (Exception e)
{
LogMessage(e.Message + " Attribute Parsing error. DataToDecrypt = " + dataToDecrypt);
throw e;
}
return plainbytes;
}
这就是我得到的:
"�{c��]�sertion xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\"><saml:AttributeStatement><saml:Attribute Name=\"userID\"><saml:AttributeValue>456</saml:AttributeValue></saml:Attribute><saml:Attribute Name=\"financialInstitutionNumber\"><saml:AttributeValue>303986258</saml:AttributeValue></saml:Attribute><saml:Attribute Name=\"password\"><saml:AttributeValue>galaxy</saml:AttributeValue></saml:Attribute></saml:AttributeStatement></saml:Assertion> "
答案 0 :(得分:2)
我认为如果没有设置,C#类使用随机IV。尝试将IV设置为8字节的字节数组,值为00h字节,并尝试使用它进行解密。如果这不起作用,你将不得不以某种方式检索IV。
PS正确的方法当然是从tdes实例请求块大小而不是放入文字8
答案 1 :(得分:0)
我正在回顾你的帖子,看到你正在尝试解密SAML断言。 SAML 2包含在WIF中,因此我会考虑下载和使用它。抽象比试图重新发明轮子更容易使用。
至于我给出的第一个答案和其他人的评论:@Henk Holterman正在关注加密机制使用botha密钥(转换为字节)和初始化向量(IV)这一事实。如果使用“标准”以外的IV(即,指定了它),则必须匹配它。
由于这是SAML,请专注于解密SAML,以便您可以应用断言。您可以使用自定义代码执行此操作,但您的搜索应该专注于SAML。