从表面上看,这似乎是一项简单的任务.有许多方法可以实现加密.我之前使用过的是基于this StackOverflow question中的AES加密代码.
在这种情况下更难的是,我需要编写代码来加密/解密访问我们数据库的各种应用程序中的数据,其中一些应用程序是使用不同的技术开发的.我们有使用Coldfusion 5,Classic ASP和ASP.NET 2.0编写的应用程序.我需要能够使用Coldfusion代码加密数据并将其存储在数据库中,然后在ASP.NET中读取并解密回原始形式.或者在Classic ASP中加密它并在Coldfusion中解密它.或者这些平台的任何其他组合.
事实证明这比我预期的要难.声称使用相同算法的不同类/对象/函数/库似乎产生不同的结果,即使给定相同的数据和相同的共享秘密.过去,我们使用CAPICOM在Coldfusion和Classic ASP之间提供加密互操作性.但是我试图让它在ASP.NET中工作时遇到了麻烦.我已经阅读了this article about how to get CAPICOM to work in .NET,但这些建议并没有对我有用.我甚至无法生成一个interop类或导入COM对象的引用而不会出现错误.此外,我们的一些生产服务器的操作系统似乎与CAPICOM不兼容,因此无论如何这可能都是死路一条.
有没有人对如何实现加密有任何建议,以至于3个平台中的任何一个都可以解密其他人加密的内容,同时仍然使用相当强大的算法?
编辑2011-12-29:
如下面的评论所述,我目前希望找到一个与我们现有的使用CAPICOM的Coldfusion / ASP Classic代码兼容的ASP.NET解决方案.这样做的原因是我们的团队负责人不希望我为我们当前的目的在我们的代码中引入新的加密方法,除非我还使用加密修改我们的旧应用程序以用于不同的目的以使用相同的方法.他想为两种目的使用相同的加密方法.由于修改我们的旧应用程序以使用新的加密方法不仅意味着更改代码,还要跟踪旧应用程序加密的所有数据,解密并使用新方法重新加密,我犹豫不决除非我必须这样做.希望我能找到一种让ASP.NET读取现有加密数据的方法.
来自我们其他Coldfusion和ASP Classic应用程序的加密数据使用CAPICOM COM对象进行编码.据我所知,这些设置一般都是AES加密,最大密钥大小(我相信在AES中是256位).
在@ Leigh的请求下,这是我们现有的CF应用程序如何使用CAPICOM的简化示例:
<cfscript> encryptObject = CreateObject("com","CAPICOM.EncryptedData"); encryptObject.Algorithm.Name = 4; // 4 is AES encryptObject.Algorithm.KeyLength = 0; // 0 is MAX,I believe 256-bit in the case of AES encryptObject.SetSecret(sharedSecret); encryptObject.Content = stringToEncrypt; encryptedData = localScope.encryptObject.Encrypt(); </cfscript>
解决方法
http://msdn.microsoft.com/en-us/library/ms179331(v=sql.90).aspx