【发布时间】:2015-07-22 08:05:14
【问题描述】:
public static string tripleDESEncryptor(string toEncrypt, string keyString)
{
var crypt = SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithmNames.TripleDesEcb);
IBuffer buffer = CryptographicBuffer.ConvertStringToBinary(toEncrypt, BinaryStringEncoding.Utf8);
IBuffer keyBuffer = CryptographicBuffer.ConvertStringToBinary(keyString, BinaryStringEncoding.Utf8);
CryptographicKey key = crypt.CreateSymmetricKey(keyBuffer);
var sigBuffer = CryptographicEngine.Sign(key, buffer); // throws exception here
string signature = CryptographicBuffer.EncodeToBase64String(sigBuffer);
return signature;
}
这会引发 InvalidCastException,我似乎无法弄清楚为什么或我做错了什么。
keyString 的长度为 24。
任何帮助将不胜感激。
【问题讨论】:
-
异常中有任何细节吗?消息、数据、堆栈跟踪?您是否尝试过使用
CryptographicBuffer.GenerateRandom(24)并将其结果与您自己的密钥缓冲区(实际类型、长度、内容种类)进行比较? -
消息:指定的转换无效。内部异常:空。堆栈跟踪:在 Windows.Security.Cryptography.Core.CryptographicEngine.Sign(CryptographicKey 密钥,IBuffer 数据)
-
@PieterWitvoet :密钥缓冲区显示长度和容量为 24,与使用 CryptographicBuffer.GenerateRandom(24) 相同。缓冲区显示长度和容量为 36。
标签: c# windows-phone-8.1 win-universal-app tripledes