注:我發現一個similar question,但它是在Python中。 有沒有辦法將字符串轉換爲基數爲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...
)
}
不僅那會是非常耗時的,但我不知道我怎麼會可能將其轉換回,如一旦我進入像這樣的數字爲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,' ')
}
雖然編碼字符串大於我所希望的,它可能有助於防止被黑客入侵或者其他什麼。
例如,使用我製作的示例here,我發出了此消息21173b2x3030172t2p38173d333936172u2p2r2t
以及此ЎDŽ̺ǦDŽ̌
。如果你設法解碼第二個,然後解碼這也ʒ̴ͻϮ
雖然這不是很實際,所以我可能會最終使用庫Ragnarokkr
鏈接到我。
謝謝大家的回覆!
定義「加密」:爲什麼不只是加密了嗎? –
@Dave我不確定我是否理解你的問題。如果你問我爲什麼不使用我提供的'encode'方法,那是因爲它只接受10個整數。 –
如果你想要一些安全的東西,這樣的事情是無用的。我問你爲什麼不使用真正的加密,而是試圖自己實現某些東西?我不明白你對「基數10整數」的評論,你說它可能是十六進制的 - 這是什麼? –