Delphi   发布时间:2022-04-10  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了delphi – 在Windows中存储密码的安全方式大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图保护包含敏感信息的本地数据库(类似于 this question,仅适用于delphi 2010)

我使用的是DISQLite component,它支持AES加密,但是我仍然需要保护我用来解密的密码.读数据库.

我最初的想法是生成一个随机密码,使用类似DPAPI(CryptProtectData和CryptUnprotectData函数在Crypt32.dll中找到)中存储它,但是我找不到任何示例

我的问题是:如何安全地存储随机生成的密码?或者,假设DPAPI路是安全的,我该如何在Delphi中实现这个DPAPI?

解决方法

最好使用Windows DPAPI.它比使用其他方法更安全:

> CryptProtectData / CryptProtectMemory
> CryptUnprotectData / CryptUnprotectMemory

CryptProtectMemory / CryptUnprotectMemory提供更多的灵活性:

> CRYPTPROTECTMEMORY_SAME_PROCESS:只有您的进程可以解密您的数据
> CRYPTPROTECTMEMORY_CROSS_PROCESS:任何进程都可以查看您的数据
> CRYPTPROTECTMEMORY_SAME_LOGON:只有使用相同用户运行的进程和在同一个会话中可以解密数据

优点:

>不需要钥匙 – Windows do it for you
>粒度控制:每个进程/每个会话/每个登录/每个机器
> CryptProtectData存在于Windows 2000及更高版本中
> DPAPI Windows比使用“安全”相关代码更安全,我和我认为Random()返回绝对随机数的人:)实际上,微软在安全领域拥有数十年的经验,拥有最多受攻击的操作系统:O)

缺点:

>在CRYPTPROTECTMEMORY_SAME_PROCESS的情况下,一个*只需要在你的进程中注入一个新的线程,这个线程就可以解密你的数据
>如果有人重置用户密码(不更改),您将无法解密您的数据
>在CRYPTPROTECTMEMORY_SAME_LOGON的情况下:如果用户*运行黑客进程,它可以解密您的数据
>如果您使用CRYPTPROTECT_LOCAL_MACHINE – 该机器上的每个用户可以解密数据. This is why it’s not recommended to save passwords in .RDP files
> Known issues

注意:“每个用户”是具有使用DPAPI的工具或技能的用户

无论如何 – 你有选择.

请注意,@ David-Heffernan是对的 – 存储在计算机上的任何东西都可以被解密 – 从内存中读取,在进程中注入线程

另一方面,为什么我们不要让饼干的生活更难?

大佬总结

以上是大佬教程为你收集整理的delphi – 在Windows中存储密码的安全方式全部内容,希望文章能够帮你解决delphi – 在Windows中存储密码的安全方式所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。