标签: cryptography

我应该选择哪种加密哈希函数?

.NET框架附带了6种不同的散列算法:

  • MD5:16字节(哈希时间500MB:1462毫秒)
  • SHA-1:20个字节(1644毫秒)
  • SHA256:32字节(5618毫秒)
  • SHA3​​84:48字节(3839毫秒)
  • SHA512:64字节(3820毫秒)
  • RIPEMD:20个字节(7066毫秒)

每个功能都有不同的表现; MD5是最快的,RIPEMD是最慢的.

MD5的优势在于它适用于内置的Guid类型; 它是3型UUID的基础.SHA-1哈希是类型5 UUID的基础.这使得它们非常易于识别.

然而,MD5易受碰撞攻击,SHA-1也容易受到攻击,但程度较轻.

在什么条件下我应该使用哪种散列算法?

我真的很想回答的具体问题是:

  • MD5不值得信任吗?在正常情况下,当您使用没有恶意意图的MD5算法且没有任何第三方有任何恶意意图时,您会期望任何冲突(意味着两个任意byte []产生相同的哈希)

  • RIPEMD比SHA1好多少?(如果它更好)它的计算速度要慢5倍,但散列大小与SHA1相同.

  • 散列文件名(或其他短字符串)时获得非恶意冲突的几率是多少?(例如,2个具有相同MD5哈希值的随机文件名)(使用MD5/SHA1/SHA2xx)一般来说,非恶意冲突的几率是多少?

这是我使用的基准:

    static void TimeAction(string description, int iterations, Action func) {
        var watch = new Stopwatch();
        watch.Start();
        for (int i = 0; i < iterations; i++) {
            func();
        }
        watch.Stop();
        Console.Write(description);
        Console.WriteLine(" Time Elapsed {0} ms", watch.ElapsedMilliseconds);
    }

    static byte[] GetRandomBytes(int count) {
        var bytes = new byte[count];
        (new Random()).NextBytes(bytes);
        return bytes;
    }


    static void …
Run Code Online (Sandbox Code Playgroud)

.net c# hash cryptography cryptographic-hash-function

135
推荐指数
3
解决办法
7万
查看次数

为什么XOR是组合哈希的默认方式?

假设您有两个哈希H(A)并且H(B)您想要将它们组合在一起.我已经读到了将两个哈希值组合在一起的好方法XOR,例如XOR( H(A), H(B) ).

我发现的最佳解释在这里简要介绍了这些哈希函数指南:

对具有大致随机分布的两个数字进行异或,导致另一个数字仍具有大致随机分布*,但现在取决于这两个值.
...
*在两个数字相结合的每个比特,一个输出0,如果两个比特相等,否则为1.换句话说,在组合的50%,1将输出.因此,如果两个输入位各有大约50-50的机会为0或1,那么输出位也是如此.

你能解释为什么XOR应该是组合散列函数(而不是OR或AND等)的默认操作的直觉和/或数学吗?

hash cryptography bit-manipulation probability xor

135
推荐指数
5
解决办法
5万
查看次数

133
推荐指数
3
解决办法
6万
查看次数

加密配置文件中的密码?

我有一个程序从配置文件中读取服务器信息,并希望加密该配置中的密码,该密码可由我的程序读取并解密.

质量要求:

  • 加密要存储在文件中的明文密码
  • 解密从我的程序中读取的加密密码

关于我将如何做到这一点的任何建议?我正在考虑编写自己的算法,但我觉得它会非常不安全.

java security encryption configuration cryptography

125
推荐指数
5
解决办法
18万
查看次数

在C#中使用AES加密

我似乎无法找到使用AES 128位加密的一个很好的清洁示例.

有没有人有一些示例代码?

c# cryptography aes rijndaelmanaged

118
推荐指数
7
解决办法
34万
查看次数

计算MD5哈希的CPU密集程度是否比SHA系列功能少?

在"标准"笔记本电脑x86硬件上计算MD5散列的CPU密集程度是否比SHA-1或SHA-2少?我对一般信息感兴趣,不是特定于某个芯片.

更新: 在我的情况下,我有兴趣计算文件的哈希值.如果文件大小很重要,我们假设它是300K.

hash md5 cryptography sha1 sha2

110
推荐指数
4
解决办法
10万
查看次数

如何在php中加密/解密数据?

我现在是一名学生,我正在学习PHP,我正在尝试在PHP中对数据进行简单的加密/解密.我做了一些在线研究,其中一些很混乱(至少对我而言).

这是我正在尝试做的事情:

我有一个由这些字段组成的表(UserID,Fname,Lname,Email,Password)

我想要的是加密所有字段然后解密(是否可以sha256用于加密/解密,如果不是任何加密算法)

我想要学习的另一件事是如何创造一种hash(sha256)与良好"盐"相结合的方式.(基本上我只是希望有一个简单的加密/解密实现,hash(sha256)+salt) 先生/女士,你的答案会有很大的帮助,非常感谢.谢谢++

php security encryption cryptography encryption-symmetric

108
推荐指数
5
解决办法
17万
查看次数

填充无效,无法删除?

我已经在线查看了这个异常对我的程序的意义,但似乎无法找到解决方案或者为什么它会发生在我的特定程序中.我一直在使用我的msdn提供的示例,用于使用Rijndael算法加密和解密XmlDocument.加密工作正常,但是当我尝试解密时,我得到以下异常:

填充无效,无法删除

谁能告诉我我能做些什么来解决这个问题?我的代码是我获取密钥和其他数据的地方.如果cryptoMode为false,它将调用decrypt方法,这是异常发生的地方:

public void Cryptography(XmlDocument doc, bool cryptographyMode)
{
    RijndaelManaged key = null;
    try
    {
    // Create a new Rijndael key.
    key = new RijndaelManaged();
    const string passwordBytes = "Password1234"; //password here 

    byte[] saltBytes = Encoding.UTF8.GetBytes("SaltBytes");
    Rfc2898DeriveBytes p = new Rfc2898DeriveBytes(passwordBytes, saltBytes);
    // sizes are devided by 8 because [ 1 byte = 8 bits ] 
    key.IV = p.GetBytes(key.BlockSize/8);
    key.Key = p.GetBytes(key.KeySize/8);

    if (cryptographyMode)
    {
        Ecrypt(doc, "Content", key);
    }
    else
    {
        Decrypt(doc, key);
    }

    }
    catch (Exception ex)
    { …
Run Code Online (Sandbox Code Playgroud)

c# cryptography

107
推荐指数
10
解决办法
16万
查看次数

鉴于最终块未正确填充

我正在尝试实现基于密码的加密算法,但是我得到了这个例外:

javax.crypto.BadPaddingException:给定最终块未正确填充

可能是什么问题?(我是Java新手.)

这是我的代码:

public class PasswordCrypter {

    private Key key;

    public PasswordCrypter(String password)  {
        try{
            KeyGenerator generator;
            generator = KeyGenerator.getInstance("DES");
            SecureRandom sec = new SecureRandom(password.getBytes());
            generator.init(sec);
            key = generator.generateKey();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    public byte[] encrypt(byte[] array) throws CrypterException {
        try{
            Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, key);

            return cipher.doFinal(array);
        } catch (Exception e) { 
            e.printStackTrace();
        }
        return null;
    }

    public byte[] decrypt(byte[] array) throws CrypterException{
        try{
            Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, key);

            return cipher.doFinal(array);
        } …
Run Code Online (Sandbox Code Playgroud)

java encryption cryptography exception javax.crypto

102
推荐指数
2
解决办法
24万
查看次数

我的SSL证书应该使用什么RSA密钥长度?

我正在创建一个CSR,我想知道哪个可以说是我的RSA密钥的最佳长度.

当然,384可能太弱了,16384可能太慢了.

是否应该使用密钥长度达成共识,具体取决于证书的生命周期?

编辑:像大多数人一样,我希望我的钥匙能够相当强大.我并不担心国家安全局可能会在2019年破坏我的密钥.我只想知道当一个人计划做正常业务时最好的做法是什么(例如电子商务网站)

ssl cryptography rsa csr ssl-certificate

91
推荐指数
6
解决办法
8万
查看次数