Questions tagged «cryptography»

密码学必须进行编程。密码学尤其涵盖加密,散列和数字签名。与crypto.stackexchange.com更好地询问与软件开发不直接相关的密码学问题。


15
Android中的MD5哈希
我有一个简单的android客户端,需要与一个简单的C#HTTP侦听器“对话”。我想通过在POST请求中传递用户名/密码来提供基本的身份验证级别。 MD5哈希在C#中是微不足道的,可以为我的需求提供足够的安全性,但是我似乎找不到在android端如何做到这一点。 编辑:只是为了解决有关MD5弱点的担忧-C#服务器在我的Android客户端用户的PC上运行。在许多情况下,他们将在自己的LAN上使用wi-fi访问服务器,但风险自负,他们可能选择从Internet访问服务器。服务器上的服务也需要使用MD5直通到我无法控制的第三方应用程序。

16
MD5哈希值为何不可逆?
我一直想知道的一个概念是使用加密哈希函数和值。我知道这些函数可以生成唯一且几乎无法逆转的哈希值,但这是我一直想知道的: 如果在服务器上,则在PHP中产生: md5("stackoverflow.com") = "d0cc85b26f2ceb8714b978e07def4f6e" 通过MD5函数运行相同的字符串时,在PHP安装中会得到相同的结果。一个过程正在被用来从某个初始值中产生一些价值。 这是否意味着有某种方法可以解构正在发生的事情并反转哈希值? 这些函数使生成的字符串无法回溯是什么原因?


9
密码哈希的非随机盐
更新:我最近从这个问题中学到,在下面的整个讨论中,我(而且我相信其他人也这样做)有点令人困惑:我一直称其为Rainbow表的实际上是一个哈希表。彩虹桌是更复杂的生物,实际上是Hellman哈希链的变体。尽管我相信答案仍然是相同的(因为它不能归结为密码分析),但其中的某些讨论可能有些偏斜。 问题是:“ 什么是彩虹桌?如何使用它们? ” 通常,我总是建议使用加密强度高的随机值作为盐,与哈希函数(例如,密码)配合使用,例如,防止Rainbow Table攻击。 但是,实际上在密码学上盐必须是随机的吗?在这方面,任何唯一值(每个用户唯一,例如userId)是否足够?实际上,这将防止使用单个Rainbow Table破解系统中的所有(或大多数)密码... 但是缺乏熵真的会削弱哈希函数的加密强度吗? 注意,我不是在问为什么使用盐,如何保护它(不需要),使用单个常量哈希(不要)或要使用哪种哈希函数。 只是盐是否需要熵。 到目前为止,感谢所有人提供的答案,但我想重点介绍一下我不太熟悉的领域。对密码分析的主要影响-如果有人从密码数学PoV中获得一些输入,我将不胜感激。 另外,如果还没有考虑其他向量,那也是很好的输入(请参阅多个系统上的@Dave Sherohman点)。 除此之外,如果您有任何理论,想法或最佳实践,请提供证明,攻击场景或经验证据作为支持。甚至是可以接受折衷的合理考虑...我对这个问题的最佳实践(B资本P大写)很熟悉,我想证明这实际上提供了什么价值。 编辑:这里有一些非常好的答案,但是我认为正如@Dave所说的,归结于Rainbow Tables的常见用户名...以及可能不太常见的名称。但是,如果我的用户名是全局唯一的怎么办?对于我的系统而言,不一定是唯一的,但对于每个用户而言,例如,电子邮件地址。 没有动力为单个用户建立RT(正如@Dave所强调的那样,salt不会保密),并且这仍然可以防止群集。唯一的问题是,我在不同的站点上可能拥有相同的电子邮件和密码-但无论如何,萨尔特不会阻止它。 因此,可以归结为密码分析-是否需要熵?(我目前的想法是,从密码分析的角度来看这不是必需的,但是从其他实际原因出发。)

14
为什么要完全使用C#类System.Random而不是System.Security.Cryptography.RandomNumberGenerator?
为什么有人会根本使用System.Random的“标准”随机数生成器,而不是始终使用System.Security.Cryptography.RandomNumberGenerator(或其子类,因为RandomNumberGenerator是抽象的)的加密安全随机数生成器? 内特-劳森告诉我们,在他的谷歌技术讲座演讲“加密反击”在13:11分不从的Python,Java和C#中使用的“标准”随机数生成器,并转而使用加密安全的版本。 我知道两个版本的随机数生成器之间的区别(请参阅问题101337)。 但是,有什么理由不总是使用安全随机数生成器呢?为什么要使用System.Random?性能也许?
85 c#  .net  cryptography  random 




4
带有传输的C#RSA加密/解密
我在C#网上看到了很多使用System.Security.Cryptography.RSACryptoServiceProvider的加密/解密教程和示例,但是我希望能够做到的是: 创建RSA公钥/私钥对 传输公钥(或为概念验证,只需将其移动到字符串变量中) 创建一个新的RSA加密提供程序并使用公共密钥加密一个字符串 将加密的字符串(或数据)发送回原始加密提供者并解密该字符串 有人可以为此指出我有用的资源吗?
77 c#  cryptography  rsa 


20
不使用HTTPS登录,如何确保安全?
对于Web应用程序,当HTTPS不能用作安全措施时,是否仍可以使登录更安全?例如: 标记登录名,使重复攻击变得困难? 以某种方式从HTML密码字段加密发送的密码? 特别是,我使用CakePHP和AJAX POST调用来触发身份验证(包括提供的用户名和密码)。 问题更新: HTTPS不可用。期。如果您不喜欢这种情况,请将其视为理论问题。 没有明确的要求,您拥有现实生活中提供的任何HTTP,PHP和浏览器(cookie,JavaScript等)(没有魔术RSA二进制文件,PGP插件)。 问题是,什么是最好的,您可以解决这种情况,这比发送密码明文更好。知道每种这样的解决方案的缺点是一个加号。 任何比普通密码更好的改进都是值得欢迎的。我们的目标不是100%l33tG0Dhx0r-proff解决方案。破解起来比破解复杂要好,这要比泄露密码的琐碎嗅探要好。

1
为什么我需要使用Rfc2898DeriveBytes类(在.NET中),而不是直接使用密码作为密钥或IV?
使用Rfc2898DeriveBytes和仅使用之间有什么区别Encoding.ASCII.GetBytes(string object);? 我在这两种方法中都取得了相对的成功,前一种方法是一个比较冗长的方法,而后者则简单易懂。两者似乎都允许您最终做同样的事情,但是我很难理解使用前者而不是后者的意义。 我已经掌握的基本概念是,您可以将字符串密码转换为字节数组,以用于例如对称加密类AesManaged。通过RFC类,但是在创建rfc对象时可以使用salt值和密码。我认为它更安全,但这充其量也是毫无根据的猜测!另外,它还允许您返回一定大小的字节数组,类似的东西。 以下是一些示例,向您展示我来自哪里: byte[] myPassinBytes = Encoding.ASCII.GetBytes("some password"); 要么 string password = "P@%5w0r]>"; byte[] saltArray = Encoding.ASCII.GetBytes("this is my salt"); Rfc2898DeriveBytes rfcKey = new Rfc2898DeriveBytes(password, saltArray); 现在,可以使用“ rfcKey”对象在对称加密算法类上设置.Key或.IV属性。 即。 RijndaelManaged rj = new RijndaelManaged (); rj.Key = rfcKey.Getbytes(rj.KeySize / 8); rj.IV = rfcKey.Getbytes(rj.Blocksize / 8); 'rj'应该准备好了! 令人困惑的部分...因此,我不能只使用我的“ myPassInBytes”数组来帮助设置“ …


5
为什么java.security.NoSuchProviderException没有这样的提供者:BC?
该jar(bcprov-jdk16-145.jar)已添加到项目中,Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider())已添加到类中,并且BouncyCastleProvider.PROVIDER_NAME确实返回“ BC”,但AesFileIo.writeFile()仍然抛出java.security.NoSuchProviderException No such provider: BC。有任何想法吗? import java.io.FileOutputStream; import java.io.InputStreamReader; import java.io.ObjectOutputStream; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import org.bouncycastle.jce.provider.BouncyCastleProvider; public class AesFileIo { private static final String AES_ALGORITHM = "AES/CTR/NoPadding"; private static final String PROVIDER = BouncyCastleProvider.PROVIDER_NAME; private static final byte[] AES_KEY_128 = { // Hard coded for …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.