博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.NET中如何安全地存储认证信息(C#)
阅读量:6316 次
发布时间:2019-06-22

本文共 1175 字,大约阅读时间需要 3 分钟。

.NET中如何安全地存储认证信息(C#)

TODO: 本文由 赤石俊哉 翻译整理,您可以将本文自由地用于学习交流。如需用于其他用途请征得作者的同意。

原文链接:

验证输入的用户名和密码

如果你只希望验证输入的用户名和密码是否匹配,可以使用Rfc2898DerivedBytes类(即PBKDF2)。这比起使用诸如三次DES以及AES这样的加密算法来说要更安全一些,因为从RFC2898DerivedBytes产生的结果逆推出密码原文是不可行的。你只能将密码转换成PBKDF2的结果。

你可以参考,
这里面有一个示例,也讨论了在WinRT/Metro环境的.Net环境下。

存储密码

如果你希望存储密码以便以后进行复用,你可以使用。

它是使用了操作系统生成并且保护的密钥进行三次DES加密算法来加密解密信息的。
这就意味着你的应用程序可以省去一个大麻烦,那就是它不需要去关心密钥如何去生成以及保护。

C#中,使用System.Security.Cryptography.ProtectedData类。

举个例子,使用ProtectedData.Protect()加密一小段数据:

// 需要被保护的数据。使用Encoding.UTF8.GetBytes()将一个字符串转换成byte数组。byte[] plaintext;// 生成一个附加的熵(用于向量的初始化)byte[] entropy = new byte[20];using(RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider()){    rng.GetBytes(entropy);}byte[] ciphertext = ProtectedData.Protect(plaintext, entropy, DataProtectionScope.CurrentUser);

安全地存储熵值(entropy)和加密后文本(ciphertext),比如存储在一个只有当前用户具有读写权限的文件或者注册表项内。

在程序中,需要访问原始数据的时候,只需要使用ProtectedData.Unprotect()

byte[] plaintext = ProtectedData.Unprotect(ciphertext, entropy, DataProtectionScope.CurrentUser);

还有一些其他要注意的安全考虑,比如,避免直接将像密码这类的隐私信息存储为一个字符串(string),这样做的话在内存中是不可被通知的,所以其他人要是查看程序的内存或者Dump内存的时候,就会看到密码。

使用SecureString或者一个byte数组来代替。在不需要使用密码的时候,尽快释放掉他们,或者是全部填写0。

转载地址:http://xbuaa.baihongyu.com/

你可能感兴趣的文章
可执行程序找不到lib库地址的处理方法
查看>>
bash数组
查看>>
Richard M. Stallman 给《自由开源软件本地化》写的前言
查看>>
oracle数据库密码过期报错
查看>>
zip
查看>>
How to recover from root.sh on 11.2 Grid Infrastructure Failed
查看>>
rhel6下安装配置Squid过程
查看>>
《树莓派开发实战(第2版)》——1.1 选择树莓派型号
查看>>
在 Linux 下使用 fdisk 扩展分区容量
查看>>
结合AlphaGo算法和大数据的量化基本面分析法探讨
查看>>
如何在 Ubuntu Linux 16.04 LTS 中使用多个连接加速 apt-get/apt
查看>>
《OpenACC并行编程实战》—— 导读
查看>>
机器学习:用初等数学解读逻辑回归
查看>>
Oracle原厂老兵:从负面案例看Hint的最佳使用方式
查看>>
把自己Github上的代码添加Cocoapods支持
查看>>
C语言OJ项目参考(2493)四则运算
查看>>
find和xargs
查看>>
数据结构例程—— 交换排序之快速排序
查看>>
IOS定位服务的应用
查看>>
[SMS&WAP]实例讲解制作OTA短信来自动配置手机WAP书签[附源码]
查看>>