我目前正在研究構建在Java中的加密系統。在加密處理之前,我需要找到最有效的方法來完成以下操作:將單詞分解並編碼爲數字
當我得到一個字符串(fe'plaintext「)後,我需要將它拆分爲字母並將它們編碼爲數字(fe 0 -25)。
密碼處理我需要做上述上相反的方式,以使加密的消息(在數字編碼)進行解碼,以字母和在此之後的字母成爲再次一個字。
我主要目標是以最快的方式做我想做的事
我目前正在研究構建在Java中的加密系統。在加密處理之前,我需要找到最有效的方法來完成以下操作:將單詞分解並編碼爲數字
當我得到一個字符串(fe'plaintext「)後,我需要將它拆分爲字母並將它們編碼爲數字(fe 0 -25)。
密碼處理我需要做上述上相反的方式,以使加密的消息(在數字編碼)進行解碼,以字母和在此之後的字母成爲再次一個字。
我主要目標是以最快的方式做我想做的事
雖然你可以使用流:
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);
getBytes()和新的String(字節)應該指定ASCII字符集,而不是依賴平臺的默認字符集。但爲什麼甚至使用字符集將字符串編碼爲字節,而不是僅僅迭代字符串的字符? –
你的意思是把它們編號爲a-> 0,b-> 1,.... z-25?這就是我真正想要做的,這是在後續流程中轉向密碼學模數學的最佳方式。 –
如何只是在做它,想着之前關於做「最快的方式」?開始決定你必須做什麼,確切地說。因爲即使您只接受英文字母的小寫字母,您已經需要超過25個不同的數字。 –
嗯,這是我的錯誤沒有提到,我只接受小寫或大寫(選擇你想要的),並且其他字符不被接受。這就是爲什麼我說0-25。我已經使用每個字母,.split方法等的映射來完成它,但我需要最有效的方法來完成它。 –