为什么要将已经加密的密码转换为Base64字符串表示形式?

本文关键字:字符串 Base64 表示 转换 密码 加密 为什么 | 更新日期: 2023-09-27 18:05:41

我有一个程序,使用AES对称加密,可以加密任何给定的纯文本,并返回加密值作为数组的字节。然后将这个加密的密码存储在数据库中(作为varbinary类型),以便项目稍后检索并解密它。该程序运行良好,但是当我使用MSDN的示例作为基础构建它时,我遇到了其他几个示例,在获得加密值后,它们将作为Base64字符串返回,如下所示:

return Convert.ToBase64String(encrypted);

并将该字符串存储在数据库中。同样,在解密密码时,它接收Base64作为参数,并在继续该过程之前将其转换回其字节数组表示形式。

byte[] cipherTextAsBytes = Convert.FromBase64String(cipherText);

我的问题是,为什么我应该使用这种方法来管理我的密码?在我看来,它只是在我的代码中增加了几行本来可以忽略的代码(除非这一步增加了另一层来延迟暴力加密攻击?)。这是数据库中的内存问题(例如,varbinary值是否会比对应的字符串值消耗更多的存储空间?),还是代码中的性能速度问题,以便在比较值时更容易调试,还是仅仅是审美偏好?

为什么要将已经加密的密码转换为Base64字符串表示形式?

默认情况下,您的加密密码是一个随机的比特字符串,您需要将其作为二进制blob存储在数据库中。将这些位编码为Base64表示这些位为ASCII文本的子集,并允许您将其存储为varchar或任何其他文本数据表示。

维基百科:

Base64编码方案通常在需要时使用对需要通过媒体存储和传输的二进制数据进行编码用来处理文本数据的。

您现在还可以通过文本序列化方法(如JSON等)传递加密文本。通常使用文本比使用二进制要容易得多。请注意,Base64增加了33%的大小,因此在存储效率方面,它的效率略低,但在大多数情况下,这是一个非常可以接受的权衡。

Base64编码使其更容易放入varchar字段或配置文件。听起来字节数组很适合您的用例