2016-12-24 43 views
0

我目前正在研究構建在Java中的加密系統。在加密處理之前,我需要找到最有效的方法來完成以下操作:將單詞分解並編碼爲數字

當我得到一個字符串(fe'plaintext「)後,我需要將它拆分爲字母並將它們編碼爲數字(fe 0 -25)。

密碼處理我需要做上述上相反的方式,以使加密的消息(在數字編碼)進行解碼,以字母和在此之後的字母成爲再次一個字。

我主要目標是以最快的方式做我想做的事

+2

如何只是在做它,想着之前關於做「最快的方式」?開始決定你必須做什麼,確切地說。因爲即使您只接受英文字母的小寫字母,您已經需要超過25個不同的數字。 –

+0

嗯,這是我的錯誤沒有提到,我只接受小寫或大寫(選擇你想要的),並且其他字符不被接受。這就是爲什麼我說0-25。我已經使用每個字母,.split方法等的映射來完成它,但我需要最有效的方法來完成它。 –

回答

0

雖然你可以使用流:

str.chars().map(c -> c - 'a') // IntStream of 0-25 

由於流的開銷,在字節的普通循環將是最快的:

byte[] bytes = str.getBytes(); // OK, since all chars are in range 0-127 
for (int i = 0; i < bytes.length; i++) 
    bytes[i] = bytes[i] - 'a'; 

和反向解密/結構:

for (int i = 0; i < bytes.length; i++) 
    bytes[i] = bytes[i] + 'a'; 
String plain = new String(bytes); 
+0

getBytes()和新的String(字節)應該指定ASCII字符集,而不是依賴平臺的默認字符集。但爲什麼甚至使用字符集將字符串編碼爲字節,而不是僅僅迭代字符串的字符? –

+0

你的意思是把它們編號爲a-> 0,b-> 1,.... z-25?這就是我真正想要做的,這是在後續流程中轉向密碼學模數學的最佳方式。 –