java中的简单caesar密码

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

嘿,我正在用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.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'&&t
import 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();

    }

}