我正在尝试通过使用zlib压缩字符串(我已经使用当前 1.2.3 版本的 zlib 和 zlib 1.1.3 尝试了此代码)。 我的代码可以正常工作,除非在日本机器上运行。压缩文件后,我正在对其进行加密。解密成功,但对 uncompress 的调用返回 -3(Z_DATA_ERROR
,表示输入数据已损坏)。由于没有记录错误,我知道没有抛出异常,并且压缩函数返回 0 ( Z_OK
,表示它有效)。
因此,我怀疑问题是sCompressed
字符串在 " sCompressed = Left(sCompressed, lcompressedlen)
" 行或 " 行 "上失去了完整性encryptedData.Content = sCompressed
。或者, VB6可能在sCompressed
调用compress
. 我知道这个函数的返回值以后不会被破坏,因为那会破坏解密,这工作正常。
Public Function EncryptString(ByVal Definition As String) As String
On Error GoTo ErrorHandler
Dim encryptedData As New CAPICOM.encryptedData
encryptedData.SetSecret KEY_CONST
Dim lStringLen As Long
Dim lcompressedlen As Long
Dim sCompressed As String
Dim lReturn As Long
Dim tstpost As String
lStringLen = Len(Definition)
lcompressedlen = (lStringLen * 1.01) + 13
sCompressed = Space(lcompressedlen)
lReturn = compress(sCompressed, lcompressedlen, Definition, lStringLen)
If lReturn <> 0 Then
sCompressed = "Error: " & CStr(lReturn)
'<LOG ERROR>'
Else
sCompressed = Left(sCompressed, lcompressedlen)
End If
encryptedData.Content = sCompressed
encryptedData.Algorithm.Name = CAPICOM_ENCRYPTION_ALGORITHM_3DES
EncryptXmlString = encryptedData.Encrypt
Exit Function
ErrorHandler:
'<LOG ERROR>'
Resume Next
End Function
结论:
如果在具有可疑字符集的机器上运行,我最终让程序给出错误消息并退出。这个错误很可能仍然存在于一些设置中,也很可能在某些触发错误的设置中不存在。然而,由于目标受众是说英语的人,通过土耳其测试并不重要,不足以证明实际上花更多时间在这方面是合理的。