问题标签 [encryption]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
encryption - 如何对单个文件实施密码保护?
我正在编写一个小桌面应用程序,它应该能够加密数据文件并用密码保护它(即必须输入正确的密码才能解密)。我希望加密的数据文件是独立且可移植的,因此必须将身份验证嵌入文件中(或者我假设)。
根据我所知道的,我有一个看起来可行且合乎逻辑的策略(这可能足以造成危险),但我不知道它是否真的是一个好的设计。所以告诉我:这疯了吗?有没有更好/最好的方法来做到这一点?
- 第一步:用户输入明文密码,例如“MyDifficultPassword”
- 第 2 步:应用程序对用户密码进行哈希处理,并使用该值作为对称密钥来加密/解密数据文件。例如“MyDifficultPassword”-->“HashedUserPwdAndKey”。
- 第 3 步:应用程序对第 2 步中的哈希值进行哈希处理,并将新值保存在数据文件头(即数据文件的未加密部分)中,并使用该值来验证用户的密码。例如 "HashedUserPwdAndKey" --> "HashedValueForAuthentication"
基本上,我是从实现网站密码的常用方法(即当您不使用 OpenID 时)推断出来的,即将用户密码的(加盐)哈希存储在您的数据库中,并且从不保存实际密码. 但是由于我使用散列用户密码作为对称加密密钥,所以我不能使用相同的值进行身份验证。所以我再次对其进行哈希处理,基本上将其视为另一个密码,并将双重哈希值保存在数据文件中。这样,我可以将文件带到另一台 PC 上,只需输入我的密码即可对其进行解密。
那么这种设计是相当安全的,还是天真无望的,还是介于两者之间?谢谢!
编辑:澄清和后续问题:盐。
我认为盐必须保密才能有用,但您的答案和链接暗示情况并非如此。例如,由埃里克森(下)链接的这个规范说:
因此,此处定义的基于密码的密钥派生是密码、盐和迭代计数的函数,其中后两个量不需要保密。
这是否意味着我可以将盐值存储在与散列密钥相同的位置/文件中,并且仍然比在散列时完全不使用盐更安全?这是如何运作的?
更多上下文:加密文件不打算与其他人共享或解密,它实际上是单用户数据。但是我想将它部署在我无法完全控制的计算机上的共享环境中(例如在工作中),并且能够通过简单地复制文件来迁移/移动数据(这样我就可以在家中使用不同的工作站等)。
database - 数据加密
存储大量信用卡信息的数据库是我们刚刚完成的系统中不可避免的一部分。我想要的是卡号的最终安全性,我们设置了一种机制来加密和解密,但我们自己无法解密任何给定的号码。
我所追求的是一种即使在数据库级别也能保护这些信息的方法,这样任何人都无法进入并生成卡号文件。其他人是如何克服这个问题的?对此的“标准”方法是什么?
至于数据的使用情况,链接都是私密且安全的,除了创建记录并加密时,不会执行卡号的传输,所以我不担心前端只是后端。
好吧,数据库是 ORACLE,所以我可以使用 PL/SQL 和 Java。
asp.net - SQL Server 2005 加密、asp.net 和存储过程
我需要使用 SQL Server 2005、asp.net 和 ado.net 编写一个 Web 应用程序。此应用程序中存储的大部分用户数据都必须加密(读取 HIPAA)。
过去对于需要加密的项目,我在应用程序代码中加密/解密。但是,这通常用于加密密码或信用卡信息,因此在几个表中只有少数列。对于这个应用程序,多个表中的更多列需要加密,因此我怀疑将加密职责推入数据层会更好,特别是考虑到 SQL Server 2005 对多种加密类型的本机支持。(如果有人有真实的经验证据,我可能会被说服。)
我咨询过 BOL,我相当擅长使用 google。所以我不想要在线文章或 MSDN 文档的链接(我可能已经阅读过它)。
到目前为止,我已经想到的一种方法是使用使用证书打开的对称密钥。
所以一次性设置步骤是(理论上由 DBA 执行):
- 创建主密钥
- 将主密钥备份到文件,刻录到 CD 并在异地存储。
- 打开主密钥并创建证书。
- 将证书备份到文件,刻录到 CD 并异地存储。
- 使用证书创建具有所选加密算法的对称密钥。
然后,每当存储过程(或通过 Management Studio 的人类用户)需要访问加密数据时,您必须首先打开对称密钥,执行任何 tsql 语句或批处理,然后关闭对称密钥。
然后就 asp.net 应用程序而言,在我的例子中是应用程序代码的数据访问层,数据加密是完全透明的。
所以我的问题是:
我是否要打开、执行 tsql 语句/批处理,然后关闭存储过程中的所有对称密钥?我看到的危险是,如果 tsql 执行出现问题怎么办,并且代码 sproc 执行永远不会到达关闭密钥的语句。我假设这意味着密钥将保持打开状态,直到 sql 杀死 sproc 执行的 SPID。
我是否应该考虑对我需要执行的任何给定过程进行三个数据库调用(仅在需要加密时)?一次数据库调用打开密钥,第二次调用执行存储过程,第三次调用关闭密钥。(每个调用都包含在自己的 try catch 循环中,以最大化打开密钥最终关闭的几率。)
我需要使用客户端事务(意味着我的代码是客户端,并启动事务,执行几个 sproc,然后假设成功提交事务)有什么注意事项吗?
encryption - 跨机器加密/解密是禁忌
我在 XP 和 Vista 之间使用了对“CryptUnprotectData”(从 Crypt32.dll 公开)的相同调用。在 XP 中运行良好。在 Vista 中运行时出现以下异常:
正如预期的那样,crypt32.dll 的版本在 XP 和 Vista 之间是不同的(w/XP 实际上有更新的版本,可能是 SP3 或其他一些更新的结果)。
更具体地说,我正在加密数据,将其放入注册表,然后使用“CryptUnprotectData”读取和解密。UAC 已关闭。
有人见过这个吗?
encryption - 我应该在加密的同时使用初始化向量 (IV) 吗?
是否建议我使用初始化向量来加密/解密我的数据?它会让事情更安全吗?这是需要逐案评估的事情之一吗?
为了将其置于实际上下文中,Win32 加密函数CryptSetKeyParam允许在加密/解密之前在密钥上设置初始化向量。其他 API 也允许这样做。
一般推荐什么,为什么?
encryption - 如何查询 CrystalReports CMS 数据库?
是否可以查询 Crystal CMS 数据库并取回有意义的数据?数据似乎已加密。
我正在运行 Business Objects Crystal Report Server 11.5 版
encryption - 非专利单向加密算法
我正在寻找一种简单的非专利单向加密算法,最好是在 c 中。我想用它来验证密码。
c# - C#中是否有任何压缩和加密库?
我想压缩一些文件(成ZIP格式)并尽可能使用 C# 加密它们。有没有办法做到这一点?
加密可以作为压缩本身的一部分进行吗?
python - python中最好/最容易使用的加密库是什么
我想使用 python 加密几个文件我可以使用任何标准/著名的 python 库使用 gpg/pgp 的最佳方法是什么?