java - 我正在尝试在 java 中实现凯撒密码,但没有任何想法,因为我必须需要一个 char[] 键作为参数而不是 int 移位
问题描述
public static void getkey() {
char[] resultat = new char[256];
for (char r = 0; r < 256; r++) {
resultat[r] = r;
System.out.print(r);
}
}
您好,当我运行这个程序时,它会显示 java 中的所有 256 个字符。就像这个java 控制台 一样,但我的目标是使用这样的 String 类型的参数。
public static void getkey(String key)
此参数是字母表中的字母。当我运行程序时,它应该替换已经存储的字符的位置,如图像链接中所示。结果是,如果我添加“ZYXWVUTSRQPONMLKJIHGFEDCBA”作为参数,A 将变为 Z,B 将变为 Y,C = X,直到 Z 变为 A。
而且我将不得不创建一个方法 encrypt ,因为我正在尝试创建一个凯撒密码,并且我将不得不在其他方法中调用此方法 getkey(String key) 来编码我的文本,我没有使用 int shift ,签名该方法如下所示:
public static void encrypt(String text , char[] key)
我到处找,我没有找到任何答案,请有人有想法,我是java编程的初学者。谢谢你。
解决方案
你想做这样的事情:
private static char[] key = ZYXWVUTSRQPONMLKJIHGFEDCBA".toCharArray(); //for reference
public String encrypt(char[] key, String plaintext){
char[] encryptedText = new char[plaintext.size];
for(int i = 0; i < plaintext.size(); i++){
int charIndex = plaintext.charAt[i] - 'A'; //normalizes to A=0, Z=24
encryptedText[i] = key[charIndex % key.length];
}
return new String(encryptedText);
}
似乎您将遇到带有 ' ' 字符和其他字符的边缘情况,因此您可能需要添加一些逻辑来忽略不在加密范围内的字符。
推荐阅读
- json - 为什么我的 Netlify 函数在尝试 JSON.parse() 事件对象时抛出错误?
- magento2 - Magento 2.4 CSP 模块 - 如何将 base 64 编码字体列入白名单?
- assembly - 对 6502 间接 x 和 y 的包装感到困惑
- java - 进程 'command '/usr/lib/jvm/java-11-openjdk-amd64/bin/java'' 以非零退出值 1 结束
- sublimetext3 - 如果我有一个 JSON 对象数组,如何在 Sublime Text 3 中按“{”折叠?
- java - 无法在@Override 方法之外获取选定的微调器项目并进入另一个类
- c# - 使用 Azure SDK C# 创建和删除可用性测试
- python - 调用类变量时打印消息
- jquery - 通过 Safari 从 API 刷新数据的问题
- c++ - 无锁向量的实现