注:同様の質問を見つけましたが、Pythonにあります。
私はこれのためのアルゴリズムまたはネイティブメソッドを考えようとしてきました、そして私は困惑しています。
これは私がこれまでに持っているものです:
encode=function(n,f){
return (n).toString(f)
}
decode=function(s,f){
return parseInt(s,f)
}
基本的に、文字列を'Hello World!'
基数10(16進数でも機能します)のような数値に変換する方法が必要です。次の14438792758793754875
ような時間を無駄にする前に、適切な方法があるかどうか疑問に思っています。
str='Hello World'
returnString=''
for(var i in str){
returnString+=(
str[i]=='A'?'0'
:str[i]=='B'?'1'
etc...
)
}
これは非常に時間がかかるだけでなく、forのような数値に入ると、forループは実行されず、を返すため、どのように変換して戻すことができるかわかり11
ませL
ん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
文字列から16進文字列を生成する関数を提供し、必要に応じてリバースエンジニアリングして、次のようにしました。
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がハッキングされたりすることから保護するのに役立つ可能性があります。
たとえば、ここで作成した例を使用して、このメッセージ21173b2x3030172t2p38173d333936172u2p2r2t
とこれを作成しましたЎDŽ̺ǦDŽ̌
。そして、2番目のものをデコードすることができたら、これもデコードしますʒ̴ͻϮ
ただし、これはあまり実用的ではないため、Ragnarokkr
リンク先のライブラリを使用することになります。
ご回答ありがとうございました!