我的系统每天接收大约1500万条记录(在单独的文件中,每个文件大约有150K条记录)。系统会将这些文件从二进制文件转换为ascii,然后将数据提供给多个下游系统。 现在有一个新的要求我们必须加密每个记录中的一个字段(我们称之为字段A),fieldA的长度总是在6到10位之间。
1.加密应该以只有结果的方式进行 包含可打印字符
2.表现非常重要
3.我们在每条记录中都有其他字段可以用作加密/解密密钥,例如日期时间,但不能保证这些其他字段是唯一的(这不应该是重要的)。
4.其他下游系统应该能够使用密钥对结果进行解码(我对数据加密很新,但我认为这个密钥称为私钥)。
5.我已阅读有关SALTing的不同文章,您认为SALTing在我们的场景中是否有用?
您认为我在这里使用的最佳加密算法是什么? .net框架提供了这种算法的实现吗?
答案 0 :(得分:2)
这里有两个不同的问题:
后者很简单:使用Convert.ToBase64String(byte[])
。我所知道的所有加密算法都是二进制数据,因此您需要先将输入转换为二进制(例如使用Encoding.UTF8.GetBytes(text)
),然后加密,然后转换回使用Convert.ToBase64String
的文字。解密是使用Convert.FromBase64String
,然后应用解密二进制到二进制算法,然后反转原始转换(例如Encoding.UTF8.GetString(binary)
)。
你还没有给出足够的信息来确定你应该使用哪种加密算法 - 例如它应该是对称的还是非对称的 - 但是盐析通常涉及单向散列,而不是可逆加密。 初始化向量方面的类似概念适用于多种加密算法。
答案 1 :(得分:0)
加密的结果是二进制数据,因此您可以将数据转换为可打印字符,例如使用base64。
加密速度不是很快,使加密更加安全的一个因素是使其更加复杂,以便强力攻击需要更长时间才能完成。所以基本上,你必须在性能和安全性之间做出选择。但是,由于您加密的数据太短,速度不应该是一个大问题。
您不应该使用记录中包含的内容作为密钥。钥匙应该单独发送给接收器,这样就不容易了。
您可以使用key exchange的不同方法确保两个部分都没有其他人拥有正确的密钥。
或许,这取决于您使用的加密方式。
System.Security.Cryptography namespace中提供了加密算法,其中一些可用于您的方案。