加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 为什么我要将已经加密的密码转换为Base64字符串表示?

发布时间:2020-12-16 02:01:57 所属栏目:百科 来源:网络整理
导读:我有一个程序,使用AES对称加密,可以加密任何给定的纯文本,并将加密值作为数组的字节返回.然后将该加密密码存储在数据库中(作为varbinary类型),以便稍后由项目检索并解密.该程序工作正常,但是当我使用 MSDN’s example作为基础构建它时,我遇到了其他几个示例,
我有一个程序,使用AES对称加密,可以加密任何给定的纯文本,并将加密值作为数组的字节返回.然后将该加密密码存储在数据库中(作为varbinary类型),以便稍后由项目检索并解密.该程序工作正常,但是当我使用 MSDN’s example作为基础构建它时,我遇到了其他几个示例,在获得加密值后,它们将它作为Base64字符串返回,如下所示:

return Convert.ToBase64String(encrypted);

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

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

我的问题是,为什么我在管理密码时应该使用这种方法?我看到它的方式,它只是在我的代码中添加了几行,可以省略没有问题(除非这一步添加另一层来延迟暴力加密攻击?).这是数据库中的内存问题(因为,varbinary值会比其字符串对应物消耗更多的存储空间吗?),代码中的性能速度问题,使得在比较值时更容易进行调试,或者仅仅是审美偏好?

解决方法

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

Wikipedia:

Base64 encoding schemes are commonly used when there is a need to
encode binary data that needs to be stored and transferred over media
that are designed to deal with textual data.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读