如何将NSIS中的字符串编码为UTF-16LE格式?

时间:2019-05-05 16:34:24

标签: encoding nsis utf-16le

嗨,我正尝试在Python中为NSIS安装程序复制此代码。

m = hashlib.md5(“ C:\ PROGRAM FILES \ My Program” .encode('utf-16LE'))

它基本上对字符串进行编码,然后对其应用MD5哈希。我找到了NSIS的MD5哈希插件。但是,我仍然不知道如何将$ 0中的字符串转换为utf-16LE格式。

谢谢

1 个答案:

答案 0 :(得分:0)

如果您要构建Unicode安装程序,则可以使用Crypto plug-in并将其直接输入字符串:

Unicode True
...
Section
Crypto::HashUTF16LE MD5 "The quick brown fox jumps over the lazy dog"
Pop $0
DetailPrint $0 ; B0986AE6EE1EEFEE8A4A399090126837
SectionEnd

ANSI安装程序必须将内容写入文件并对该文件进行哈希处理:

Section
InitPluginsDir
StrCpy $1 "The quick brown fox jumps over the lazy dog"
StrLen $3 $1
IntOp $3 $3 * 2 ; UTF-16 is 2 bytes per code-unit
FileOpen $2 "$PluginsDir\Temp.txt" w
System::Call 'KERNEL32::WriteFile(pr2,wr1,ir3,*i,p0)' ; This converts the string for us
FileClose $2
Crypto::HashFile MD5 "$PluginsDir\Temp.txt"
Pop $0
DetailPrint $0
SectionEnd