.net以可打印字符结果加密的快速安全方式

时间:2011-09-20 09:29:09

标签: .net encryption

我的系统每天接收大约1500万条记录(在单独的文件中,每个文件大约有150K条记录)。系统会将这些文件从二进制文件转换为ascii,然后将数据提供给多个下游系统。 现在有一个新的要求我们必须加密每个记录中的一个字段(我们称之为字段A),fieldA的长度总是在6到10位之间。

1.加密应该以只有结果的方式进行     包含可打印字符

2.表现非常重要

3.我们在每条记录中都有其他字段可以用作加密/解密密钥,例如日期时间,但不能保证这些其他字段是唯一的(这不应该是重要的)。

4.其他下游系统应该能够使用密钥对结果进行解码(我对数据加密很新,但我认为这个密钥称为私钥)。

5.我已阅读有关SALTing的不同文章,您认为SALTing在我们的场景中是否有用?

您认为我在这里使用的最佳加密算法是什么? .net框架提供了这种算法的实现吗?

2 个答案:

答案 0 :(得分:2)

这里有两个不同的问题:

  • 安全要求选择合适的加密算法。
  • 将结果表示为可打印字符串。

后者很简单:使用Convert.ToBase64String(byte[])。我所知道的所有加密算法都是二进制数据,因此您需要先将输入转换为二进制(例如使用Encoding.UTF8.GetBytes(text)),然后加密,然后转换回使用Convert.ToBase64String的文字。解密是使用Convert.FromBase64String,然后应用解密二进制到二进制算法,然后反转原始转换(例如Encoding.UTF8.GetString(binary))。

你还没有给出足够的信息来确定你应该使用哪种加密算法 - 例如它应该是对称的还是非对称的 - 但是盐析通常涉及单向散列,而不是可逆加密。 初始化向量方面的类似概念适用于多种加密算法。

答案 1 :(得分:0)

  1. 加密的结果是二进制数据,因此您可以将数据转换为可打印字符,例如使用base64。

  2. 加密速度不是很快,使加密更加安全的一个因素是使其更加复杂,以便强力攻击需要更长时间才能完成。所以基本上,你必须在性能和安全性之间做出选择。但是,由于您加密的数据太短,速度不应该是一个大问题。

  3. 您不应该使用记录中包含的内容作为密钥。钥匙应该单独发送给接收器,这样就不容易了。

  4. 您可以使用key exchange的不同方法确保两个部分都没有其他人拥有正确的密钥。

  5. 或许,这取决于您使用的加密方式。

  6. System.Security.Cryptography namespace中提供了加密算法,其中一些可用于您的方案。