Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有办法将字符串转换为以10为基数的数字进行加密?_Javascript - Fatal编程技术网

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

Javascript 有没有办法将字符串转换为以10为基数的数字进行加密?,javascript,Javascript,注意:我找到了一个,但它是用python编写的。 我一直在想一个算法或本地方法来解决这个问题,我被难住了 这就是我到目前为止所做的: encode=function(n,f){ return (n).toString(f) } decode=function(s,f){ return parseInt(s,f) } 基本上,我需要一种转换字符串的方法,比如'helloworld!'以10为基数(十六进制也可以),比如14438792758793754875,我想知道在我可能浪

注意:我找到了一个,但它是用python编写的。
我一直在想一个算法或本地方法来解决这个问题,我被难住了

这就是我到目前为止所做的:

encode=function(n,f){
    return (n).toString(f)
}
decode=function(s,f){
    return parseInt(s,f)
}
基本上,我需要一种转换字符串的方法,比如
'helloworld!'
以10为基数(十六进制也可以),比如
14438792758793754875
,我想知道在我可能浪费时间做以下事情之前,是否有合适的方法:

str='Hello World'
returnString=''
for(var i in str){
    returnString+=(
        str[i]=='A'?'0'
        :str[i]=='B'?'1'
        etc...
    )
}
//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
这不仅会非常耗时,而且我不知道如何将其转换回来,因为一旦我输入像
11
for
L
这样的数字,for循环就不行了,并且会返回
BB

我问这个问题的原因是因为我计划将来使用它来实现更高效、更安全、更加密的存储。例如,类似于:

str='Hello World'
returnString=''
for(var i in str){
    returnString+=(
        str[i]=='A'?'0'
        :str[i]=='B'?'1'
        etc...
    )
}
//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
虽然编码的字符串比我希望的要大,但它可能有助于保护cookies免受黑客攻击或其他攻击

例如,使用我制作的示例,我制作了这个消息
21173b2x3030172t2p38173d33936172u2p2r2t
,以及这个
。如果你成功解码了第二个,那么也解码这个

但这并不实用,因此我可能会使用链接到我的库
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;
}
函数编码(字符串){
var number=“0x”;
var length=string.length;
对于(变量i=0;i
请参见此处的演示:

解码同样简单:

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;
}
功能解码(数字){
var字符串=”;
编号=编号。切片(2);
变量长度=number.length;
对于(变量i=0;i

尝试演示:

虽然我以前从未使用过这个库,但我的一位朋友对这个库进行了很好的评价。显然,您可以使用此库中的任何基本标准对字符串进行编码:


定义“加密”:为什么不加密它?@Dave我不确定我是否理解你的问题。如果你问我为什么不使用我提供的
encode
方法,那是因为它只接受以10为基数的整数。如果你想要安全的东西,像这样琐碎的东西是无用的。我想问的是,你为什么不直接使用实际的加密,而不是自己尝试实现一些东西呢?我不理解你关于“10进制整数”的评论,你说它可以是十六进制的,是哪一个?如果你需要真正的加密,我认为这可能非常有用。它还支持散列和加密/解密算法。@B1KMusic谢谢。我很高兴知道这对你有帮助;)我真的不能使用
8.7521611808888254e+25
(我从输入
Hello World
中得到的)@B1KMusic-我更新了答案。既然您不介意十六进制,这应该可以解决您的问题。嗯,当我将十六进制字符串转换回十进制时,我仍然得到
8.7521611808888254e+25
。@B1KMusic-问题是JavaScript数字是双精度浮点值。这就是为什么非常大的值会被转换成指数形式。通过您使用的方法,
String.prototype.charCodeAt()
,我能够设计出自己的方法,并成功地将
Hello
转换为
202t303033
。所以我对你的答案投了赞成票。谢谢