java中的简单caesar密码
嘿,我正在用Java用公式[x->(x+shift-1)mod 127+1]制作一个简单的caesar密码。我希望我的加密文本包含ASCII字符,控制字符除外(即32-127)。如何避免在加密文本中应用0-31之间的控制字符。谢谢。像这样的东西怎么样:java中的简单caesar密码,java,cryptography,ascii,Java,Cryptography,Ascii,嘿,我正在用Java用公式[x->(x+shift-1)mod 127+1]制作一个简单的caesar密码。我希望我的加密文本包含ASCII字符,控制字符除外(即32-127)。如何避免在加密文本中应用0-31之间的控制字符。谢谢。像这样的东西怎么样: public String applyCaesar(String text, int shift) { char[] chars = text.toCharArray(); for (int i=0; i < text.le
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);
}
公共字符串applyCaesar(字符串文本,int-shift)
{
char[]chars=text.toCharArray();
对于(int i=0;i 如果(c>=32&&c将字符从[32..127]映射到[0..95],则执行mod 95+1
并将结果映射回[32..127]。通常密码文本是base64编码,base16(十六进制)也可以很好地工作。Base64最常用于密文,因为它比十六进制占用更少的空间,十六进制最常用于消息摘要。在java.util.prefs.Base64库中,您可以找到byteArrayToBase64()和base64ToByteArray()
在一个旁注下,你不应该为了安全原因而编写你自己的加密算法,你应该使用块密码或流密码。我希望这是好玩的!
!有没有方法来考虑整个字符的范围?例如,“A”、“E”、“Oy”、“Ni”,而不考虑“[空间])?(例如,我的字符串是“Hello World”,标准结果是“Khoor#Zruog”;我想删除该“#”,因此结果将是“Khoor#Zruog”)
我相信我的答案就在这段代码中:
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);
}
如果(c>=32&&c为什么不试试
for(int i=0;i
将此复制粘贴到名为“caesar”的NetBeans中:
//包恺撒;
导入java.io.*;
公营恺撒{
int offset=3;
公共字符串加密(字符串s)引发IOException
{
StringBuilder sb=新的StringBuilder();
对于(inti=0;i='A'&&t='A'&&timport java.util.Scanner;
//凯瑟
公共课专业分配{
公共静态最终字符串字母表=“ABCDEFGHIJKLMNOPQRSTUVWXYZhh”;
公共静态字符串加密(字符串明文,int-shiftKey)
{
明文=明文。toUpperCase();
字符串密文=”;
对于(inti=0;iHomework?如果是,请将其标记为这样。如需任何帮助,请与我联系。
//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<s.length();i++)
{
char t=s.charAt(i);
if(t>='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<s.length();i++)
{
char t=s.charAt(i);
if(t>='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<plainText.length(); i++)
{
int charPosition = ALPHABET.indexOf(plainText.charAt(i));
int keyVal = (shiftKey + charPosition)% 26 ;
char replaceVal = ALPHABET.charAt(keyVal);
cipherText += replaceVal;
}
return cipherText;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter the string for Encryption:");
String message = new String();
message = sc.next();
System.out.println(encrypt(message,3));
sc.close();
}
}