Existe uma maneira de converter uma seqüência de caracteres em um número de base 10 para criptografia?
Nota: eu encontrei umpergunta semelhante, mas é em python.
Eu tenho tentado pensar em um algoritmo ou método nativo para isso, e estou perplexo.Isto é o que eu tenho até agora:
encode=function(n,f){
return (n).toString(f)
}
decode=function(s,f){
return parseInt(s,f)
}
Basicamente, eu preciso de uma maneira de converter uma string, como'Hello World!'
para uma base 10 (hexadecimal funcionará bem) número, como14438792758793754875
, e eu estou querendo saber se há uma maneira correta de fazê-lo antes que eu possa perder meu tempo com algo como:
str='Hello World'
returnString=''
for(var i in str){
returnString+=(
str[i]=='A'?'0'
:str[i]=='B'?'1'
etc...
)
}
Não só isso seria muito demorado, mas eu não tenho idéia de como eu poderia convertê-lo de volta, como uma vez eu entrar em números como11
paraL
, um loop não faria, e retornariaBB
.
A razão pela qual estou perguntando isso é porque pretendo usá-lo no futuro para um armazenamento criptografado mais eficiente e seguro. por exemplo, algo como:
//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
Na verdade, passei vários minutos criptografando manualmente 'Milk', 'Eggs' e 'Bread' para suas bases36 para que pudesse ser preciso.
Atualizar:Aadit M Shaw
deu uma função que produz seqüências de caracteres hexadecimais de seqüências de caracteres, e eu inverti engenharia para minhas necessidades e tenho isso:
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,' ')
}
Enquanto a string codificada é maior do que eu teria gostado, poderia ser útil para proteger cookies de serem hackeados ou algo assim.
Por exemplo, usando o exemplo que fizAquiEu fiz essa mensagem21173b2x3030172t2p38173d333936172u2p2r2t
assim como issoЎDŽ̺ǦDŽ̌
. E se você conseguir decodificar o segundo, decodifique isso tambémʒ̴ͻϮ
Isso não é muito prático, então eu provavelmente vou acabar usando a bibliotecaRagnarokkr
me ligou a.
Obrigado a todos pelas respostas!