NSIS将字符串转换为固定长度的Code

时间:2017-11-13 04:19:55

标签: nsis

我有加密的信息,并希望将其转换为固定格式

示例字符串: IQIphBbUPPQrLdehz1JEB6a3yj4pCuDNhpHPfBAxVuYeDKlaK7mOuB40RxHpdmBVj33iMTk8GZ+/ShJdoWJcUPxlCZXIPue2JgOoGv+LXpvCcL724h7nsxSu2JoltXMm4VZ3HUwCLsOrEP7h6f2Q6ZFBqII43WzHL4f2LRjQIioFD/eE7kcgY104Axlj0Gcw

我想将其转换为以下格式:(0-9 A-Z) 0000-0000-0000-0000-0000-0000-0000

因此输出看起来像: 0D1Z-52CV-8645-8256-428S-RTG6-452D

与Hex输出类似,但长度固定。

这可能吗?注意:加密字符串的长度会有所不同。

1 个答案:

答案 0 :(得分:1)

如果您正在谈论单向函数/ cryptographic hash /消息摘要,那么您可以使用NSIS Wiki中的one of the plug-ins

Crypto::HashData "SHA1" "IQIphBbUPPQrLdehz1JEB6a3yj4pCuDNhpHPfBAxVuYeDKlaK7mOuB40RxHpdmBVj33iMTk8GZ+/ShJdoWJcUPxlCZXIPue2JgOoGv+LXpvCcL724h7nsxSu2JoltXMm4VZ3HUwCLsOrEP7h6f2Q6ZFBqII43WzHL4f2LRjQIioFD/eE7kcgY104Axlj0Gcw"
Pop $0
DetailPrint $0 ; A598CAB0215FFD7E27551515FA3DAF8D5AFD6D27

您可以以任何方式格式化这些十六进制字节:

Crypto::HashData "MD5" "IQIphBbUPPQrLdehz1JEB6a3yj4pCuDNhpHPfBAxVuYeDKlaK7mOuB40RxHpdmBVj33iMTk8GZ+/ShJdoWJcUPxlCZXIPue2JgOoGv+LXpvCcL724h7nsxSu2JoltXMm4VZ3HUwCLsOrEP7h6f2Q6ZFBqII43WzHL4f2LRjQIioFD/eE7kcgY104Axlj0Gcw"
Pop $0
DetailPrint $0 ; A709E7B1FF62582B7B97632F71912EB8 (MD5 is shorter but less secure)

StrCpy $1 ""
StrCpy $3 0
loop:
StrCpy $2 $0 4 $3
IntOp $3 $3 + 4
StrCmp $2 "" done
StrCpy $1 "$1-$2"
StrLen $2 $2
IntCmpU $2 4 loop done loop
done:
StrCpy $1 $1 "" 1
DetailPrint $1 ; A709-E7B1-FF62-582B-7B97-632F-7191-2EB8

另一方面,如果您想要取回原始输入字符串,那么您想要做的就是不可能。在对某些东西进行哈希处理后,您只能将其与其他哈希进行比较,您无法(轻松)找出初始输入。也可能存在冲突,其中两个不同的输入将生成相同的输出散列(字符串" Hello"理论上可以具有与电话簿的完整内容相同的散列等。)