Есть ли способ преобразовать строку в число 10 для шифрования?
Примечание: я нашеланалогичный вопрос, но это в питоне.
Я пытался придумать алгоритм или нативный метод для этого, и я в тупике.Это то, что я до сих пор:
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,' ')
}
Хотя закодированная строка больше, чем мне бы хотелось, она может быть полезна для защиты куки от взлома или чего-то еще.
Например, используя пример, который я сделалВотЯ сделал это сообщение21173b2x3030172t2p38173d333936172u2p2r2t
а также этоЎDŽ̺ǦDŽ̌
, И если вам удастся декодировать второй, то декодировать это тожеʒ̴ͻϮ
Это не очень практично, поэтому я, вероятно, в конечном итоге использовать библиотекуRagnarokkr
связал меня с.
Спасибо всем за ответы!