最近,我继承了一个遗留的php项目,该项目使用crypt函数滚动了它自己的auth。我正在进行逆向工程,但不太明白它是如何工作的。
保存此密码的代码如下所示
$pass = crypt('password') // no salt. This result is saved to password col of user table
为了验证密码哈希,应用程序首先从DB中提取哈希,然后根据哈希验证它,如下所示
$pass = get_submitted_password()
$hash = get_the_hash_from_database()
return $hash
关于密码学和碰撞问题,我提出了一个问题,即是否有可能将一个特定大小的位数组的每一个可能的组合存储在一个至少小一点的位数组中,并且有条不紊地确定不会发生碰撞。
一个人对我的回答是否定的,他举了以下例子:
Given 4 bits
0000
It has 16 possible combinations
Try storing 16 possible combinations in 3 bits:
000
虽然在较小的规模上这似乎是显而易见的,但我想知道,如果你扩大规模,这是否仍然是正确的,因为更多的比特将提供更多的灵活性和选项(相反,你需要更多的组合考虑)。我很难想象它不是真实的,但是也许有些东
我现在要道歉,因为这个问题在我的脑海里听起来很愚蠢,而且我可能忽略了一些非常明显的东西。不管怎样..。
好的,我在自学scala,作为学习练习,我决定实现一个方法来确定一个字符串是否包含另一个更小的字符串。我做的第一件事是使用朴素版本,在这个版本中,我转到字符串的每个字母,并开始向前检查每个字符是否匹配。一切都很顺利。然后我决定实现一个更有效的方法,这是我想出来的(不包括特殊情况):
// return true if a is a substring of b
def is_sub(a: String, b: String) : Boolean = {
for(i <- 0 unt
我使用这个函数来编码输入:
Public Function encodeStrings(ByVal MyPass As String, ByVal MyUName As String) As String
Dim ENPass As String = Nothing
Dim password As String = (MyPass + MyUName)
Dim mhash As HashAlgorithm = New SHA1CryptoServiceProvider
Dim bytValue() As Byte = System.Text.Encoding.U