问题标签 [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.
c# - C# 中的动态加密
我正在学习 C#。我想编写一个动态加密程序。类似于Truecrypt的东西。它基本上创建了一个加密容器,可以将其安装为虚拟驱动器,您可以从中即时解密文件,而无需将它们写入硬盘驱动器。Truecrypt 使用一些过滤器驱动程序[我不知道它们是什么]。我需要知道它是否可以在 c# 中实现。我需要学习任何驱动程序编程吗?可以不使用驱动程序来完成吗?我需要学习什么?
java - SHA1 和 RSA 与 java.security.Signature 对比 MessageDigest 和 Cipher
我试图了解 Java java.security.Signature类的作用。如果我计算一个 SHA1 消息摘要,然后使用 RSA 对该摘要进行加密,我会得到与要求Signature类签署相同内容不同的结果:
结果(例如):
输入数据:这是正在签名的消息
摘要:62b0a9ef15461c82766fb5bdaae9edbe4ac2e067
密文:057dc0d2f7f54acc95d3cf5cba9f944619394711003bdd12...
签名:7177c74bbbb871cc0af922e30d2808ebae1...25
我必须对Signature正在做什么有一个根本的误解——我已经通过它进行了跟踪,它似乎正在调用MessageDigest对象的更新,算法设置为 SHA1,正如我所期望的那样,然后获取摘要,然后执行加密。是什么导致结果不同?
编辑:
Leonidas 让我检查签名方案是否应该按照我的想法去做。RFC中定义了两种类型的签名:
其中第一个(PKCS1)是我上面描述的那个。它使用散列函数创建摘要,然后使用私钥对结果进行加密。
第二种算法使用随机盐值,更安全但不确定。如果重复使用相同的密钥,上面代码产生的签名不会改变,所以我认为它不可能是 PSS。
编辑:
这是bytes2string
我使用的方法:
.net - 在 RSACryptoServiceProvider 上找不到文件,服务帐户权限?
我们的 Web 服务包装了包含以下代码的第三方库。
我们在 IIS 6 应用程序池中使用 Active Directory 服务帐户(没有交互式登录功能)。我们的服务因错误“系统找不到指定的文件”而失败。我们已将错误追溯到RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
. 第三方程序集的加密过程依赖于基于 x509 文件的证书,并且服务帐户具有对密钥文件夹的读/写访问权限。此外,服务帐户还具有以下权限:
“C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys”。
代码:
我们打开 FileMon 并注意到该 AppPool 有一个 FILE NOT FOUND ,然后是同一个文件的另一个 SUCCESS 。
我在这里没有我的元素,有人知道我们为什么会看到这个吗?
c - DES 加密和密码模式
我需要加密ISO 8583消息...这里的问题是消息比密钥长。我需要有人帮助我如何加密这个字符串。
例如:我的字符串中有 300 个字符;我应该单独加密每个 16 个字符然后连接它们,因为我的主密钥长度是 16 个字节?
我感谢您的帮助...
ISO 8583-1:2003 金融交易卡发起的消息——交换消息规范——第 1 部分:消息、数据元素和代码值。
security - 密码哈希的非随机盐
更新:我最近从这个问题中了解到,在下面的整个讨论中,我(我相信其他人也这样做)有点令人困惑:我一直称之为彩虹表的东西实际上被称为哈希表。彩虹表是更复杂的生物,实际上是 Hellman Hash Chains 的一种变体。尽管我相信答案仍然是相同的(因为它不归结为密码分析),但某些讨论可能有点歪曲。
问题:“什么是彩虹表,它们是如何使用的? ”
通常,我总是建议使用加密强度高的随机值作为盐,与散列函数(例如密码)一起使用,例如防止彩虹表攻击。
但是,盐在加密上是否真的有必要是随机的?在这方面是否有任何唯一值(每个用户唯一,例如 userId)就足够了?事实上,它会阻止使用单个彩虹表来破解系统中的所有(或大部分)密码......
但是缺乏熵真的会削弱散列函数的加密强度吗?
注意,我不是在问为什么要使用盐,如何保护它(它不需要),使用单个常量哈希(不要),或者使用什么样的哈希函数。
只是盐是否需要熵。
到目前为止,感谢所有人的回答,但我想专注于我(有点)不太熟悉的领域。主要是对密码分析的影响——如果有人对密码数学 PoV 有一些意见,我将不胜感激。
此外,如果还有其他未考虑的向量,那也是很好的输入(请参阅@Dave Sherohman 关于多个系统的观点)。
除此之外,如果您有任何理论、想法或最佳实践 - 请用证据、攻击场景或经验证据支持这一点。甚至是对可接受的权衡的有效考虑......我熟悉这个主题的最佳实践(资本 B 资本 P),我想证明这实际上提供了什么价值。
编辑:这里有一些非常好的答案,但我认为正如@Dave 所说,它归结为常见用户名的彩虹表......以及可能不太常见的名称。但是,如果我的用户名是全球唯一的怎么办?对于我的系统来说不一定是唯一的,但对于每个用户来说都是独一无二的——例如电子邮件地址。
没有动力为单个用户构建 RT(正如@Dave 强调的那样,盐不是保密的),这仍然会阻止集群。唯一的问题是我可能在不同的站点上拥有相同的电子邮件和密码 - 但无论如何盐不会阻止这种情况。
所以,它回到密码分析——熵是否必要?(我目前的想法是从密码分析的角度来看没有必要,但出于其他实际原因。)
asp.net-mvc - Html.AntiForgeryToken() 升级到 .NET 3.5 SP1 后导致错误
我刚刚更新到 .NET 3.5 SP1,我曾经工作的 ASP.NET MVC 页面现在已经停止工作。
尝试加载页面时,我得到以下 YSOD
如果我删除线
一切都恢复正常了,有什么想法可能导致这种情况吗?如果这是 MVC 或 .NET 问题,我本来希望找到解决方案的运气更好,所以我猜这与我的配置有关。
我尝试重新安装 MVC 框架,看看是否是因为我在 SP1 之前安装,但我仍然遇到同样的问题。Google 和 SO 搜索尚未得出任何确定的结论。
hash - 使用 2 个不同的哈希函数是检查文件完整性的好方法吗?
我有一个网站,用户可以上传他们的文件;这些存储在服务器上,它们的元数据记录在数据库中。我正在实施一些简单的完整性检查,即“这个文件的内容现在是否与上传时的字节内容相同?”
一个例子:对于 的内容userfile.jpg
,MD5 哈希是39f9031a154dc7ba105eb4f76f1a0fd4
SHA-1 哈希是878d8d667721e356bf6646bd2ec21fff50cdd4a9
。如果这个文件的内容发生了变化,但前后的 MD5 哈希值相同,那么 SHA-1 哈希值是否也可能保持不变?(使用散列,有时您可能会遇到散列冲突 - 这会同时使用两种不同的散列算法吗?)
或者是为一个文件计算两个不同的哈希值(我应该尝试一些其他机制来验证完整性)?
编辑:我并不真正担心意外损坏,但我应该防止用户更改文件而不引起注意(生日攻击和朋友)。
我可能会选择一个哈希,SHA-512——检查不会经常成为性能瓶颈,无论如何,“正如 Bruce Schneier 所说,已经有足够快、不安全的系统了。-@MichaelGG 在评论”。
python - 如何在 Python 中验证 RSA SHA1 签名?
我有一个字符串、一个签名和一个公钥,我想验证字符串上的签名。密钥如下所示:
我一直在阅读 pycrypto 文档,但我不知道如何使用这种密钥制作 RSAobj。如果您了解 PHP,我正在尝试执行以下操作:
另外,如果我对任何术语感到困惑,请告诉我。
iphone - 您将如何在 iPhone 应用程序中保护机密数据?
假设我需要从 iPhone 应用程序访问 Web 服务。此 Web 服务要求客户端对 HTTP 请求进行数字签名,以证明应用程序“知道”共享密钥;客户端密钥。请求签名存储在 HTTP 标头中,请求只是通过 HTTP(不是 HTTPS)发送。
此密钥必须始终保密,但需要由 iPhone 应用程序使用。
那么,鉴于您一直被告知永远不要在客户端存储任何敏感信息,您将如何安全地存储此密钥?
普通用户(99% 的用户)会很乐意使用该应用程序。会有人(敌人?)想要该秘密客户端密钥,以便通过冒充的方式对服务或客户端密钥所有者造成伤害。这样的人可能会越狱他们的手机,访问二进制文件,运行“字符串”或十六进制编辑器并四处寻找。因此,仅将密钥存储在源代码中是一个糟糕的主意。
另一个想法是将密钥存储在代码中,而不是字符串文字,而是存储在从字节文字创建的 NSMutableArray 中。
一个人可以使用钥匙串,但由于 iPhone 应用程序永远不必提供密码来存储钥匙串中的东西,我担心有权访问应用程序沙箱的人可以并且将能够简单地查看或简单地解码其中的项目。
编辑 - 所以我读到了关于钥匙串的内容:“在 iPhone OS 中,应用程序始终可以访问自己的钥匙串项目,而无法访问任何其他应用程序的项目。系统为钥匙串生成自己的密码,并存储密钥以任何应用程序都无法访问的方式在设备上。”
所以也许这是存储密钥的最佳位置......如果是这样,我如何将预先输入到应用程序钥匙串中的密钥发送?那可能吗?否则,如果密钥不在源代码中,您如何在首次启动时添加密钥?唔..
编辑 - 在http://bugreport.apple.com提交错误报告 # 6584858
谢谢。
oop - 您将如何设计 OO 类来处理密码系统及其密钥
这是一个比我之前的问题更广泛但相关的问题。
我想在 Ruby 中实现老式的加密系统,例如ADFGVX、VIC 密码等,主要是为了好玩。这些密码系统建立在更通用的系统之上,如替换(单字母,如 Caesar 或多字母,如 Vigenere)和转置(简单,双)。我的问题实际上是如何创建类层次结构来处理密码系统和密钥。
像 Vigenere < Substitution < SimpleCipher 之类的东西?钥匙呢?一些替换键在使用前被压缩(“ARABESQUE”变成“ARBESQU”),而大多数转置键没有,依此类推。
现在,我有一个非常基本的设计文档(我说basic),我想了想,我似乎找不到令人满意的方法,所以我来这里是为了你的智慧。
实现将在 Ruby 中进行,但除非设计必须使用多重继承,否则它与 Ruby 本身无关。
Mercurial 中的概念证明(尚未可运行且可能错误)。