Java,如何实现移位密码(凯撒密码) [英] Java, How to implement a Shift Cipher (Caesar Cipher)

查看:35
本文介绍了Java,如何实现移位密码(凯撒密码)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想实现一个 Caesar Cipher shift 以将字符串中的每个字母增加 3.

I want to implement a Caesar Cipher shift to increase each letter in a string by 3.

我收到此错误:

possible loss of precision required char; found int

这是我目前的代码:

import java.util.Scanner;
import java.io.*;

public class CaesarCipher
{
    public static void main (String [] args) {

        char[] letters = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 
            'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 
            'w', 'x', 'y', 'z'};

        char[] message = "onceuponatime".toCharArray();
        char[] eMessage = new char[message.length];
        char shift = 3;

        //encrypting message
        for(int i = 0; i <= message.length; ++i)
        {
            eMessage[i] = (message[i] + shift) % (char) letters.length;
            System.out.println(x);               
        }              
    }
}

是什么导致了这个错误?如何实现凯撒密码转换以将字符串中的每个字母增加 3?

What causes this error? How can I implement a caesar Cipher shift to increase each letter in a string by 3?

推荐答案

Java Shift Caesar Cipher by shift 空格.

限制:

  1. 仅适用于 shift 参数中的正数.
  2. 仅适用于小于 26 的班次.
  3. 执行 += 会使计算机陷入超过几千个字符的正文.
  4. 将数字转换为字符,因此除了 ascii 字母之外的任何字符都会失败.
  5. 只允许字母 a 到 z.无法处理空格、数字、符号或 unicode.
  6. 代码重复计算次数过多,违反了 DRY(不要重复自己)原则.

伪代码:

  1. 遍历字符串中的每个字符.
  2. 向字符添加移位,如果它落在字母表的末尾,则从字母表中的字母数中减去移位 (26)
  3. 如果移位没有使字符从字母表的末尾脱落,则向字符添加移位.
  4. 将字符附加到新字符串上.返回字符串.

功能:

String cipher(String msg, int shift){
    String s = "";
    int len = msg.length();
    for(int x = 0; x < len; x++){
        char c = (char)(msg.charAt(x) + shift);
        if (c > 'z')
            s += (char)(msg.charAt(x) - (26-shift));
        else
            s += (char)(msg.charAt(x) + shift);
    }
    return s;
}

如何调用它:

System.out.println(cipher("abc", 3));  //prints def
System.out.println(cipher("xyz", 3));  //prints abc

这篇关于Java,如何实现移位密码(凯撒密码)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆