gpt4 book ai didi

javascript - 有没有办法将字符串转换为以 10 为基数的数字以进行加密?

转载 作者:数据小太阳 更新时间:2023-10-29 06:07:25 24 4
gpt4 key购买 nike

注意:我找到了一个 similar question ,但它是在 python 中。


我一直在尝试为此考虑一种算法或 native 方法,但我很困惑。

这是我目前所拥有的:

encode=function(n,f){
return (n).toString(f)
}
decode=function(s,f){
return parseInt(s,f)
}

基本上,我需要一种方法将字符串(如 'Hello World!')转换为以 10 为基数(也可以使用十六进制)的数字,如 14438792758793754875,我想知道在我可能浪费我的时间之前是否有合适的方法来做到这一点:

str='Hello World'
returnString=''
for(var i in str){
returnString+=(
str[i]=='A'?'0'
:str[i]=='B'?'1'
etc...
)
}

这不仅会非常耗时,而且我不知道如何将它转换回来,因为一旦我将 11 转换为 L, for 循环不会执行,并且会返回 BB

我问这个问题的原因是因为我计划在未来使用它来实现更高效、更安全的加密存储。例如,像这样的东西:

//save
numstr=encodeToNumber(inputElement.value)
b36str=encode(numstr,36)
storage['items'].push(b36str)
localStorage['App Data']=JSON.stringify(storage)

//load
if(localStorage['App Data']){
storage=JSON.parse(localStorage['App Data'])
}else{
storage={
items:[],
config:{
etc
}
}
}
//Assuming storage.items looks like this: ['rgie', 'zyy', '2il7']
for(i in storage['items']){
b36str=storage['items']//rgie, zyy, 2il7
numstr=decode(b36str,36)//1281110, 46618, 117403
container.innerHTML+='<hr>'+decodeFromNumber(numstr)//Milk, Eggs, Bread
}

//Output
Milk
Eggs
Bread

实际上,我确实花了几分钟将“牛奶”、“鸡蛋”和“面包”手动加密为它们的 base36 对应物,因此它可能是准确的。


更新:Aadit M Shaw 提供了一个从字符串生成十六进制字符串的函数,我根据需要对其进行逆向工程并得到了这个:

en=function(s){
var s2d=function(s){
s=s.replace(/ /g,'+').replace(/!/g,'.')
var n=[]
for(var i in s){
n.push(s.charCodeAt(i))
}
return n
}
var arr=s2d(s)
var s2=''
for (var i in arr){
s2+=arr[i].toString(36)
}
return s2
}
de=function(s){
var arr=s.split(/(..)/)
var arr2=[]
var s2=''
for(var i in arr){
if(arr[i]){
arr2.push(parseInt(arr[i],36))
}
}
for(var i in arr2){
s2+=String.fromCharCode(arr2[i])
}
return s2.replace(/\+/g,' ')
}

虽然编码后的字符串比我希望的要大,但它可能有助于保护 cookie 免遭黑客攻击或其他事情。

比如用我做的例子here , 我制作了这条消息 21173b2x3030172t2p38173d333936172u2p2r2t 以及这条 ЎDŽ̺ǦDŽ̌。如果你设法解码第二个,那么也解码这个 ʒ̴ͻϮ

虽然这不是很实用,所以我可能最终会使用 Ragnarokkr 链接到我的库。

谢谢大家的回复!

最佳答案

试试这个:

function encode(string) {
var number = "0x";
var length = string.length;
for (var i = 0; i < length; i++)
number += string.charCodeAt(i).toString(16);
return number;
}

在此处查看演示:http://jsfiddle.net/hGKAg/2/

解码就这么简单:

function decode(number) {
var string = "";
number = number.slice(2);
var length = number.length;
for (var i = 0; i < length;) {
var code = number.slice(i, i += 2);
string += String.fromCharCode(parseInt(code, 16));
}
return string;
}

尝试演示:http://jsfiddle.net/hGKAg/3/

关于javascript - 有没有办法将字符串转换为以 10 为基数的数字以进行加密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14346829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com