我正在开发一个应用程序(iOS和Java),它需要一个部分来生成序列号以及从用户输入中读取它。
我的输出加密字符串看起来像十六进制数据(长字符串),如下所示:
"397cf2dbcb034c6c8e63120a211a78f1a628cfa2b36692b5efd3aff93219ca9457bde99765eab793a2f2be183082a702"
显然,用户阅读和重新输入非常困难。我正在寻找一个解决方案,从上面的字符串生成序列号类型字符串(如:xxxx-xxxx-xxxx-xxxx)。 (我必须能够解码序列号并检索应用程序内的长字符串)
答案 0 :(得分:0)
Base-64编码怎么样?那将会和你一样好。这是base-64中该数据的编码:
echo "397cf2dbcb034c6c8e63120a211a78f1a628cfa2b36692b5efd3aff93219ca9457bde99765eab793a2f2be183082a702" | xxd -r -p | base64
OXzy28sDTGyOYxIKIRp48aYoz6KzZpK179Ov+TIZypRXvemXZeq3k6LyvhgwgqcC
答案 1 :(得分:0)
你必须使用那个大的哈希函数吗?鉴于它只是一个序列号,你可以使用更小的东西 - 像128位哈希?即使是十六进制,这也是合理的,而在64中,这是非常合理的。使用base-64,您将获得一个128位密钥,其形式为xxxxxx-xxxxxx-xxxx-xxxxxx