我从几年前写过图书馆的人手中接过了一项任务。该库是VB和ASP。
我在PHP工作我需要解密在VB中加密后存储在数据库中的大量字符串:
Public Function Encrypt(ByVal myString As Object) As String
If IsDBNull(myString) Or IsNothing(myString) Then
Return String.Empty
Else
If myString.Length = 0 Then
Return ""
Else
cryptDES3.Key = cryptMD5Hash.ComputeHash(ASCIIEncoding.ASCII.GetBytes(myKey))
cryptDES3.Mode = CipherMode.ECB
Dim desdencrypt As ICryptoTransform = cryptDES3.CreateEncryptor()
Dim MyASCIIEncoding As ASCIIEncoding = New ASCIIEncoding()
Dim buff() As Byte = ASCIIEncoding.ASCII.GetBytes(myString)
Return Convert.ToBase64String(desdencrypt.TransformFinalBlock(buff, 0, buff.Length))
End If
End If
End Function
VB中适当的解密函数如下:
Public Function Decrypt(ByVal myString As Object) As String
Try
If IsDBNull(myString) Or IsNothing(myString) Then
Return String.Empty
Else
If myString.Length = 0 Then
Return ""
Else
cryptDES3.Key = cryptMD5Hash.ComputeHash(ASCIIEncoding.ASCII.GetBytes(myKey))
cryptDES3.Mode = CipherMode.ECB
Dim desdencrypt As ICryptoTransform = cryptDES3.CreateDecryptor()
Dim buff() As Byte = Convert.FromBase64String(myString)
Decrypt = ASCIIEncoding.ASCII.GetString(desdencrypt.TransformFinalBlock(buff, 0, buff.Length))
End If
End If
Catch ex As Exception
Return "DB Error"
End Try
End Function
有人能提出如何在PHP中解密字符串的想法吗?我已经尝试了这里提出的各种想法,但没有一个能够提供我应该得到的实际数据!
答案 0 :(得分:0)
(代表OP发布)。
我通过考虑Mark在此页面上的建议解决了这个问题。谢谢马克。以防万一其他人挣扎:
$data = "my_string";
$secret = "my_secret";
$key = md5(utf8_encode($secret), true);
$key .= substr($key, 0, 8);
$data = base64_decode($data);
$data = mcrypt_decrypt('tripledes', $key, $data, 'ecb');
$block = mcrypt_get_block_size('tripledes', 'ecb');
$len = strlen($data);
$pad = ord($data[$len-1]);
echo "Decrypted string is: " . substr($data, 0, strlen($data) - $pad);