我需要使用当前的.net 4.5代码在另一个应用程序中解密来自ScriptResource.axd网址的d。
示例网址:
<script src="/ScriptResource.axd?d=uBiLKmMIzkaavHlylMEgvqJFJuEnTqx-mMCevtyiy0KtaoGntw3zkVxSf9-7vVftEoviBYTu9G9pNcPMBekA8w_3HIQ-FHgM7KrekUC12jp66gU79E1WTxXaeLES1gLuYI01XfoaNBuGce8VFhZVkrsFwxC8--M7hcL2HMwOIJZBLW9w0&t=ffffffffc8b7aa56" type="text/javascript"></script>
根据Cryptographic Improvements in ASP.NET 4.5, pt. 2,我需要有目的地致电MachineKey.Unprotect。
我在.net源代码"ScriptResourceHandler.ScriptResourceUrl"
中找到了我的想法我的机器密钥(已清理)在服务器(生成网址)和本地计算机(用于测试)上匹配。
<machineKey validationKey="HEX" decryptionKey="HEX" validation="SHA1" decryption="AES" compatibilityMode="Framework45"/>
我的解密代码如下:
public static string Decrypt(string encrypted, string purpose = "ScriptResourceHandler.ScriptResourceUrl")
{
if (string.IsNullOrEmpty(encrypted))
return string.Empty;
try
{
var bytes = HttpServerUtility.UrlTokenDecode(encrypted);
if (bytes != null && bytes.Length > 0)
{
var decryptedBytes = MachineKey.Unprotect(bytes,new string [] { purpose });
if (decryptedBytes != null && decryptedBytes.Length > 0)
return Encoder.GetString(decryptedBytes);
}
}
catch (Exception ex)
{
return ex.Message;
}
return string.Empty;
}
我得到的输出是Error occurred during a cryptographic operation.
,我已经无法进入.net源代码以找出更多信息。
如果我使用compatibilityMode来定位框架2.0,我可以使它工作,但这会引起一些安全问题。
有关使用4.5.2的任何想法吗?