NSIS将字符串转换为固定长度代码

NSIS将字符串转换为固定长度代码,nsis,Nsis,我有我加密的信息,并希望将其转换为固定格式 示例字符串: IQiphbuppqrldehz1jeb6a3yj4pcudnhpfbaxvuyedklak7moub40rxhpdmbj33imtk8gz+/ShJdoWJcUPxlCZXIPue2JgOoGv+lxpvccl724h7nsxsu2joltxmm4vz3h6f2q6zfqi43wzhl4f2ljqiiofd/eE7kcgY104Axlj0Gcw 我想把它转换成如下格式:(0-9a-Z) 0000-0000-0000-0000-0000-

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

示例字符串:
IQiphbuppqrldehz1jeb6a3yj4pcudnhpfbaxvuyedklak7moub40rxhpdmbj33imtk8gz+/ShJdoWJcUPxlCZXIPue2JgOoGv+lxpvccl724h7nsxsu2joltxmm4vz3h6f2q6zfqi43wzhl4f2ljqiiofd/eE7kcgY104Axlj0Gcw

我想把它转换成如下格式:(0-9a-Z)
0000-0000-0000-0000-0000-0000-0000-0000-0000

因此,输出将类似于:
0D1Z-52CV-8645-8256-428S-RTG6-452D

与十六进制输出类似,但长度固定


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

如果您谈论的是单向函数//消息摘要,那么您可以从NSIS Wiki使用:

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”理论上可能与电话簿的完整内容等具有相同的散列)。

您需要能够获取原始字符串还是只需要单向函数?是的,只有单向函数。第二种格式化方法正是我所需要的。它非常有效。但一旦散列,一个字符串匹配另一个字符串的可能性很小,对吗?我用这个来创建一种计算机指纹。赔率是32比36次方“1.5324955408e+54”我认为这足够好了?是的,机会很小。MD5被认为是被破坏的,因为有一点计算能力的人可以故意制造碰撞。