java中的简单凯撒密码

嘿我用Java编写了一个简单的caesar密码[x-​​>(x + shift-1)mod 127 + 1]我希望我的加密文本除了控制字符外都有ASCII字符(即从32开始) -127)。 如何避免0-31应用加密文本中的控制字符。 谢谢。

这样的事情怎么样:

public String applyCaesar(String text, int shift) { char[] chars = text.toCharArray(); for (int i=0; i < text.length(); i++) { char c = chars[i]; if (c >= 32 && c <= 127) { // Change base to make life easier, and use an // int explicitly to avoid worrying... cast later int x = c - 32; x = (x + shift) % 96; if (x < 0) x += 96; //java modulo can lead to negative values! chars[i] = (char) (x + 32); } } return new String(chars); } 

不可否认,这将127视为一个非控制角色,它不是......你可能希望调整它以保持范围为[32,126]。

将您的角色从[32..127]映射到[0..95],执行mod 95+1并将结果映射回[32..127]。

通常密文是base64编码的,base16(hex)也很好用。 Base64最常用于密文,因为它占用的空间少于hex,hex最常用于消息摘要。 在java.util.prefs.Base64库中,您将找到byteArrayToBase64()和base64ToByteArray()。

另外,出于安全原因,您不应该编写自己的加密算法,您应该使用分组密码或流密码。 我希望这是为了好玩!

那里! 有没有办法考虑整个角色范围? 例如,“á”,“é”,“ö”,“ñ”,而不考虑“”([空间])? (例如,我的String是“Hello World”,标准结果是“Khoor#Zruog”;我想删除“#”,所以结果将是“KhoorZruog”)

我确定我的回答是在这段代码中:

 if (c >= 32 && c <= 127) { // Change base to make life easier, and use an // int explicitly to avoid worrying... cast later int x = c - 32; x = (x + shift) % 96; chars[i] = (char) (x + 32); } 

......但是我尝试了一些东西,但没有用:S所以,我会等你的答案:D见!

为什么不尝试

for(int i = 0; i < length; i++) { char c = chars[i] if(Character.isLetter(c)) { int x = c - 32; x = (x + shift) % 96; chars[i] = (char) (x+32); } }

将其粘贴到名为“caesar”的NetBeans中:

  //package caesar; import java.io.*; public class caesar { int offset=3; public String encrypt(String s) throws IOException { StringBuilder sb=new StringBuilder(); for(int i=0;i='A' && t<='Z') { int t1=t-'A'+offset; t1=t1%26; sb.append((char)(t1+'A')); } else if(t>='a' && t<='z') { int t1=t-'a'+offset; t1=t1%26; sb.append((char)(t1+'a')); } } return sb.toString(); } public String decrypt(String s) throws IOException { StringBuilder sb=new StringBuilder(); for(int i=0;i='A' && t<='Z') { int t1=t-'A'-offset; if(t1<0)t1=26+t1; sb.append((char)(t1+'A')); } else if(t>='a' && t<='z') { int t1=t-'a'-offset; if(t1<0)t1=26+t1; sb.append((char)(t1+'a')); } } return sb.toString(); } public static void main(String[] args) { try { System.out.println("Caesar encrypion technique"); BufferedReader b; String oriTxt,encTxt,decTxt; System.out.println("Enter string to encrypt:"); b=new BufferedReader(new InputStreamReader(System.in)); oriTxt=b.readLine(); caesar c=new caesar(); encTxt=c.encrypt(oriTxt); System.out.println("Encrypted text :"+encTxt); decTxt=c.decrypt(encTxt); System.out.println("Derypted text :"+decTxt); } catch(Exception e) { System.out.println(e.toString()); } } 

}

 import java.util.Scanner; //caeser public class Major_Assingment { public static final String ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZhh"; public static String encrypt(String plainText,int shiftKey) { plainText = plainText.toUpperCase(); String cipherText= " "; for(int i=0; i