2016-12-24 152 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?这就是我真正想要做的,这是在后续流程中转向密码学模数学的最佳方式。 –