我目前正在研究构建在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方法等的映射来完成它,但我需要最有效的方法来完成它。 –