问题标签 [cryptography]

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.

0 投票
2 回答
1030 浏览

cryptography - 为什么 s-box 的输入比它的输出长?

我不明白这篇关于 s-box 的文章中多余的部分是从哪里来的。为什么 s-box 输入的位数与输出的位数不同?

0 投票
6 回答
2786 浏览

encoding - 如何生成唯一、小的、随机且用户友好的密钥?

几个月前,我的任务是为我们的 Web 应用程序实现一个独特的随机代码。代码必须对用户友好且尽可能小,但本质上仍然是随机的(因此用户无法轻易预测序列中的下一个代码)。

它最终生成了如下所示的值:

不幸的是,我从未对实施感到满意。Guid 是不可能的,它们太大了,用户很难输入。我希望有更多的 4 或 5 个字符/数字,但如果我们编码为,我们的特定实现会产生明显的图案序列少于 9 个字符。

这是我们最终要做的事情:

我们从数据库中提取了一个唯一的连续 32 位 id。然后我们将它插入到一个 64 位 RANDOM 整数的中心位中。我们创建了一个易于键入和识别的字符(AZ、az、2-9 跳过容易混淆的字符,如 L、l、1、O、0 等)的查找表。最后,我们使用该查找表对 64 位整数进行 base-54 编码。高位是随机的,低位是随机的,但中心位是连续的。

最终的结果是一个比 guid 小得多的代码,而且看起来很随机,尽管它绝对不是。

我对这个特定的实现从来不满意。你们会怎么做?

0 投票
5 回答
9431 浏览

security - 如何为多个收件人加密一封邮件?

使用两个密钥(可能是基于密码的)完成数据加密的基本原理是什么,但只需要两个密钥中的一个(任何一个)来解密数据?

例如,数据用用户的密码和他的公司密码加密,然后他或他的公司可以解密数据。他们都不知道另一个密码。仅存储一份加密数据的副本。

我不是指公钥/私钥。可能是通过对称密钥密码术,也许它涉及将密钥异或在一起以使用它们进行加密。

更新:我还想找到一个根本不涉及存储密钥的解决方案。

0 投票
10 回答
7668 浏览

.net - 是否有用于信用卡加密的最佳 .NET 算法?

.NETSystem.Security.Cryptography命名空间有一组相当令人困惑的算法,我可以使用这些算法来加密信用卡详细信息。哪个是最好的?

对于相对较短的字符串,它显然需要安全。

编辑:我在英国,我知道只要三位数的 CVV 号码从未被存储,我们就可以存储加密的信用卡详细信息。并感谢大家的好评。

0 投票
4 回答
12270 浏览

vb.net - App.config 连接字符串保护错误

我遇到了以前遇到的问题;找不到我关于如何解决它的参考。

这是问题所在。我们使用以下代码为我们的客户端应用程序加密 app.config 中的连接字符串部分:

问题是我们有一个销售人员离开了。旧笔记本电脑要交给新的销售人员,并且在新用户的登录下,当它尝试这样做时,我们会收到错误消息。错误是:

0 投票
2 回答
3764 浏览

.net - 如何在我的 .NET 应用程序中使用从 Win32 CryptoAPI 生成的密钥 blob?

我有一个用 C++ 为 Windows 编写的现有应用程序。此应用程序使用 Win32 CryptoAPI 生成 TripleDES 会话密钥,用于加密/解密数据。我们使用一个技巧的指数将会话密钥导出为 blob,这允许 blob 以解密格式存储在某处。

问题是我们如何在 .NET 应用程序 (C#) 中使用它。该框架封装/包装了 CryptoAPI 所做的大部分工作。部分问题是 CryptAPI 指出Microsoft 增强加密提供程序的 TripleDES 算法是 168 位(3 个 56 位的密钥)。但是,.NET 框架声明它们的密钥是 192 位(3 个 64 位的密钥)。显然,.NET 框架中的 3 个额外字节是为了奇偶校验?

无论如何,我们需要从 blob 中读取关键部分,并且能够以某种方式在我们的 .NET 应用程序中使用它。目前,当我们尝试在 .NET 中使用密钥时,我们没有得到预期的结果。解密失败得很惨。任何帮助将不胜感激。

更新:

我一直在想办法解决这个问题,并提出了一个我会及时发布的解决方案。但是,仍然会感谢其他人的任何反馈。

0 投票
6 回答
9601 浏览

java - 使用 Java 进行 128 位数据加密

我需要通过使用至少 128 位密钥对其进行加密来存储一些敏感数据。我调查了 javax.crypto 包,发现有某些密码名称,如 PBEWithMD5AndDES 或 PBEWithSHA1AndDESede,它们提供高达 56 位和 80 位的加密(http://en.wikipedia.org/wiki/DESede)。

我提到了其他人的帖子,但那些主要使用 RSA,据我了解,RSA 通常适用于加密通信数据(使用私钥-公钥对)。我的需求不同,我只想存储数据并通过解密将其取回。因此我不需要任何私钥-公钥对。

如果您对此有任何想法,请告诉我。

0 投票
2 回答
4604 浏览

java - Bouncy Castle API 线程安全吗?

Bouncy Castle API线程安全吗?尤其,

我打算在我的应用程序中编写一个单例 Spring bean 来支持基本级别的密码学。由于它是一个 Web 应用程序,因此多个线程一次访问该组件的机会更大。因此,胎面安全在这里至关重要。

如果您在使用 Bouncy Castle 时遇到过此类情况,请告诉我。

0 投票
5 回答
8636 浏览

encryption - 如何对单个文件实施密码保护?

我正在编写一个小桌面应用程序,它应该能够加密数据文件并用密码保护它(即必须输入正确的密码才能解密)。我希望加密的数据文件是独立且可移植的,因此必须将身份验证嵌入文件中(或者我假设)。

根据我所知道的,我有一个看起来可行且合乎逻辑的策略(这可能足以造成危险),但我不知道它是否真的是一个好的设计。所以告诉我:这疯了吗?有没有更好/最好的方法来做到这一点?

  • 第一步:用户输入明文密码,例如“MyDifficultPassword”
  • 第 2 步:应用程序对用户密码进行哈希处理,并使用该值作为对称密钥来加密/解密数据文件。例如“MyDifficultPassword”-->“HashedUserPwdAndKey”。
  • 第 3 步:应用程序对第​​ 2 步中的哈希值进行哈希处理,并将新值保存在数据文件头(即数据文件的未加密部分)中,并使用该值来验证用户的密码。例如 "HashedUserPwdAndKey" --> "HashedValueForAuthentication"

基本上,我是从实现网站密码的常用方法(即当您不使用 OpenID 时)推断出来的,即将用户密码的(加盐)哈希存储在您的数据库中,并且从不保存实际密码. 但是由于我使用散列用户密码作为对称加密密钥,所以我不能使用相同的值进行身份验证。所以我再次对其进行哈希处理,基本上将其视为另一个密码,并将双重哈希值保存在数据文件中。这样,我可以将文件带到另一台 PC 上,只需输入我的密码即可对其进行解密。

那么这种设计是相当安全的,还是天真无望的,还是介于两者之间?谢谢!

编辑:澄清和后续问题:盐。
我认为盐必须保密才能有用,但您的答案和链接暗示情况并非如此。例如,由埃里克森(下)链接的这个规范说:

因此,此处定义的基于密码的密钥派生是密码、盐和迭代计数的函数,其中后两个量不需要保密。

这是否意味着我可以将盐值存储在与散列密钥相同的位置/文件中,并且仍然比在散列时完全不使用盐更安全?这是如何运作的?

更多上下文:加密文件不打算与其他人共享或解密,它实际上是单用户数据。但是我想将它部署在我无法完全控制的计算机上的共享环境中(例如在工作中),并且能够通过简单地复制文件来迁移/移动数据(这样我就可以在家中使用不同的工作站等)。

0 投票
3 回答
2896 浏览

security - 非对称密钥容器的互转换性(例如:X.509、PGP、OpenSSH)

非对称加密密钥基本上可以在主要密钥容器格式之间相互转换吗?例如,我可以将 X.509 密钥文件转换为 PGP 或 OpenGPG 密钥文件吗?

并且 - 假设答案是肯定的 - 将一对密钥以任何格式保存并转换为该场合所需的任何容器文件格式是否“安全中立”?

我有点厌倦了为 X.509、OpenGPG 和 SSH 维护这么多密钥对,因为它们的核心都是 RSA。