某一天,一位同事他发现一个系统中,一个任意的16个字符串不知道怎么变成了一个由32个16进制字符组成的字符串,于是本文产生了。
在这里,我理解的【加密】就是把容易看懂的信息转换成了不容易理解或者不能理解的信息。
回到主题,从同事的疑问中不难看出两个关键信息:
- 16个字符
- 32个【16进制】字符
只要接触过计算机,我们不难知道,在我们的键盘上分布着许多字符键,有数字、英文字母、特殊字符等等。我们通过敲击按键就能够把这些字符输入到计算机中,而作为程序员的你当然知道我们编码常用的就是一种由美国制定的信息交换标准代码所表示的字符,被称作ASCII码。如下:
ASCII码表是由7位二进制表示的128个字符的集合,如果转换成10进制,0-31和127表示设备控制字符,32-126表示数字、英文大小写字母、特殊字符、空格等,我们称之为可见字符。
所以,我有理由相信同事所说的16个字符串是由ASCII码所表示的可见字符组成。
那么,如何让16个变成32个?那就需要由2个字符来表示1个字符!
嗯....
此处, 需要灵感。。。。。。。。
似乎....ASCII码可以用10进制数表示,而大于15小于256的10进制数就可以用两位16进制数表示了,那么,16个就能变成32个了!
来看:
// ME1D8FgA5SCbsKS9 -> 4D4531443846674135534362734B5339
// 实际的例子转了大写
"ME1D8FgA5SCbsKS9".replace(/./g,(match)=>{
return match.charCodeAt().toString(16).toUpperCase()
})