gpt4 book ai didi

Java 加密/解密分配 : Offsetting Characters

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:11:01 24 4
gpt4 key购买 nike

我被困在我的一个类的一些代码上。我的教授鼓励在诸如此类的论坛上提问,尤其是因为这样给他的问题更少 :),所以我想我会向你们所有人寻求帮助。

我的任务的目的是通过移动或偏移字符来加密、解密和输入字符串,超过用户告诉它的次数。我的代码如下。

出于某种原因,我在解密我的加密文本时出错,并且该错误仅在运行我的代码时出现在数字为 6 或更多时,因此如果使用教授的示例并加密“subterfuge”以偏移 6 个字符来制作“yahzkxlamk”,然后尝试解密文本以再次偏移 6 个字符以制作“诡计”,这给了我一个错误。错误是

java.lang.StringIndexOutOfBoundsException: String index out of range: -6

当我使用相同的输入字符串“subterfuge”运行代码,但偏移量为 5 或更小时,它可以正常工作。据说该错误发生在下面代码的第 65 行,其中显示了

sb.append(alphabet.charAt(offset));

在最后一个 else 语句中我的 Decrypt() 方法的末尾。

import javax.swing.*;

public class Encryptor {


private String plainText;
private int shift;
public String cipherText;


public Encryptor() {
plainText = null;
shift = 0;
}

public static void main(String[] args) {


//encryption block
Encryptor e = new Encryptor();
String strCipherText = e.Encrypt();
System.out.println("encrypted text");
System.out.println(strCipherText);

//decrypt block
Encryptor d = new Encryptor();

//cipher text becomes the input text to the Decrypt method
d.cipherText = strCipherText;

String strPlainText = d.Decrypt();
System.out.println("decrypted text");
System.out.println(strPlainText);

System.exit(0);


}//end of main method

public String Decrypt()
{

plainText = cipherText;

shift = Integer.parseInt(JOptionPane.showInputDialog("enter offset"));

int offset=0;
int newOffset=0;
String alphabet ="abcdefghijklmnopqrstuvwxyz";
StringBuffer sb = new StringBuffer();
int index = plainText.length();
for(int i=0;i<index;i++)
{
String temp = "" + plainText.charAt(i);

offset = alphabet.indexOf(temp);
offset -= shift;
if(offset > 25)
{
newOffset = offset % 26;
sb.append(alphabet.charAt(newOffset));
}
else
{
sb.append(alphabet.charAt(offset));
}
}//end of for loop
return sb.toString();// return encrypted string
}

public String Encrypt()
{

plainText = ((String)JOptionPane.showInputDialog("enter words " + "to encrypt")).toLowerCase().trim();


shift = Integer.parseInt(JOptionPane.showInputDialog("enter offset"));

int offset=0;
int newOffset=0;
String alphabet = "abcdefghijklmnopqrstuvwxyz";
StringBuffer sb = new StringBuffer();
int index = plainText.length();
for(int i=0;i<index;i++)
{
String temp = "" + plainText.charAt(i);

offset = alphabet.indexOf(temp);
offset += shift;
if(offset > 25)
{
newOffset = offset % 26;
sb.append(alphabet.charAt(newOffset));
}
else
{
sb.append(alphabet.charAt(offset));
}
}//end of for loop
return sb.toString();// return encrypted string
}

最佳答案

这是你的问题:

offset = alphabet.indexOf(temp);
offset -= shift;
if(offset > 25)
{
newOffset = offset % 26;
sb.append(alphabet.charAt(newOffset));
}
else
{
sb.append(alphabet.charAt(offset));//< New offset is less than 0
}

你想要的是一个纯正的模函数。因此,只需在进行模块化划分后添加:

while(newOffset < 0)
newOffset += 26;

我倾向于做的只是为此创建一个函数:

/* Positive modular division. */
public static int pmod(int num, int mod)
{
num %= mod;
if(num < 0) num += mod;
return num;
}

关于Java 加密/解密分配 : Offsetting Characters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28374067/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com