调用老版腾讯云短信接口的时候出现了以下问题,服务器上出现的,本地正常,服务器系统为windows server 2012 r2,本地系统为win10;
调用的目标发生了异常。
mscorlib 在 System.RuntimeMethodHandle._InvokeConstructor(Object[] args, SignatureStruct& signature, IntPtr declaringType)
在 System.RuntimeMethodHandle.InvokeConstructor(Object[] args, SignatureStruct signature, RuntimeTypeHandle declaringType)
在 System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
在 System.Security.Cryptography.CryptoConfig.CreateFromName(String name, Object[] args)
在 System.Security.Cryptography.CryptoConfig.CreateFromName(String name)
在 System.Security.Cryptography.SHA256.Create(String hashName)
在 System.Security.Cryptography.SHA256.Create()
在 businessClass.SmsSenderUtil.StrToHash(String str)
在 businessClass.SmsSender.Send(Int32 type, String nationCode, String phoneNumber, String msg, String extend, String ext)>
网上查找原因,找到了一篇类似的,说是使用的加密算法不符合联邦信息处理标准(FIPS)。在组策略中启用了Windows安全选项“系统加密”。
地址为:https://www.cnblogs.com/Katakana/p/10246708.html
通过该文章的解决方案增加了web.config的配置,但是没有效果;
望大神指教
我们用的也是腾讯云短信接口,计算签名的代码如下:
private string ComputeSignature(string appKey, string mobile, int random, long timestamp)
{
var input = $"appkey={appKey}&random={random}&time={timestamp}&mobile={mobile}";
using (var sha = SHA256.Create())
{
var hasBytes = sha.ComputeHash(Encoding.UTF8.GetBytes(input));
return string.Join("", hasBytes.Select(b => b.ToString("x2")));
}
}