1

我正在研究 asp.net 和 php 的基本安全性,我已经能够在 asp.net 上实现该应用程序,现在我想做的是使用 php 想出同样的事情

这是我用于我的 asp.net 应用程序的代码,如果可能的话,我想将其转换为 php:

public static byte[] GenerateSalt()
    {
        const int MinSaltSize = 4;
        const int MaxSaltSize = 8;

        // Generate a random number to determine the salt size.
        Random random = new Random();
        int saltSize = random.Next(MinSaltSize, MaxSaltSize);

        // Allocate a byte array, to hold the salt.
        byte[] saltBytes = new byte[saltSize];

        // Initialize the cryptographically secure random number generator.
        RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();

        // Fill the salt with cryptographically strong byte values.
        rng.GetNonZeroBytes(saltBytes);

        return saltBytes;
    }

我也想知道 rng.GetNonZeroBytes() 在 php 中使用什么函数

然后我会使用 base64_encode/base64_decode 作为数据。先生/女士,您的回答会很有帮助。谢谢++ :D

4

1 回答 1

1

mcrypt_create_iv(size, MCRYPT_DEV_URANDOM)应该没问题,尽管名字很奇怪。它几乎等同于rng.GetBytes.

使用DEV_URANDOM是必不可少的,对于可以忽略不计的安全性增加DEV_RANDOM来说非常缓慢,并且RAND是不安全的。

不知道为什么你想要非零字节。在 Base64 编码之后,零字节将是正常的可打印字符。

我建议使用类似的东西base64_encode(mcrypt_create_iv(9, MCRYPT_DEV_URANDOM))

于 2012-11-03T10:05:53.713 回答