异常消息:This implementation is not part of the Windows Platform FIPS validated cryptographic algorithms.
异常信息: at System.Security.Cryptography.MD5CryptoServiceProvider..ctor()

引用 :

http://www.xiaozhou.net/let_your_dotnet_program_compatible_with_fips-2012-02-17.html

开始之前,先介绍一下术语:

FIPS,全称是Federal Information Processing Standard,中文名叫联邦信息处理标准,FIPS 是由两个政府主体开发的标准。一个是美国国家标准和在美国境内的技术。另一种是通信安全机构,在加拿大。FIPS 是建议或要求使用 (美国或加拿大) 的联邦政府操作 IT 系统中的标准。

FIPS 140-2,主要用来定义安全级别,整个FIPS 140-2分为四个安全级别,它主要定义了一些和安全相关的策略,包括指定哪些加密算法和可使用的哈希算法和加密密钥的生成和管理的方式。

故事从这里开始,最近在做公司项目的时候,遇到一个很怪异的问题。我们的一个模块在普通的操作系统上,能正常运行,但是在启用了FIPS策略的机器上,就挂了。刚开始,还以为是其他原因,后来终于真相大白,这个bug和FIPS的安全策略有关。后来才知道,这个bug和US gov定义的这个安全策略那是相当的有基情!

前面已经提到,FIPS中有对加密算法的严格要求,总的来说,有些算法是FIPS允许的,有些是不允许的。而我的一个模块,恰恰用到了一个不兼容FIPS的加密算法,刚刚撞在了枪口上。悲剧啊⋯⋯

不过还是要感谢google老师,在搜索了一上午后,终于找到了解决办法:

第一种,是在.NET的配置文件<configuration>节点内增加runtime节点,加入如下节点:

<runtime>
<enforcefipspolicy enabled="false"></enforcefipspolicy>
</runtime>

通过把enforceFIPSPolicy强行设置为false,从而避过FIPS的策略检查。

https://msdn.microsoft.com/en-us/library/hh202806(v=vs.110).aspx

05-07 15:08