【发布时间】:2017-02-14 03:17:39
【问题描述】:
我正在开发一个实现各种传统方法的加密程序。对于其中一些人来说,最好将我的信息表示为数字 0-25。 A 为 0,B 为 1,等等。这种移位密码就是这种情况,因为您必须使用 mod 26 进行环绕。空格和标点符号也必须保留。 这是执行移位密码的方法的代码:
public static void shift(char k, char eord)
{
if(eord=='E' || eord=='e')
{
int [] mi= new int[mc.length];
for(int i=0; i<mc.length; i++)
{
if ((mc[i]>='a' && mc[i]<='z') || (mc[i]>='A' && mc[i]<='Z'))
{
mi[i]=(int)(mc[i]+k);
mi[i]=mi[i]%26;
//mc[i]=(char)mi[i];
//System.out.println(mi[i]);
}
}
}
}
mc 是一个包含消息的字符数组,而 eord 是一个字符,它将确定是运行算法来加密还是解密。我的代码所做的是检查以确保 mc[i] 是一个字母,然后添加 char k (密钥),然后我将其转换为一个整数,以便我可以修改 26。有些东西不能正常工作,因为当我有一个'b'(1)键并查看整数表示是什么时,它肯定是不正确的。完成后,我还需要将其转换回字符,以便向用户提供消息的明文/密文。
【问题讨论】:
-
char
b的 ASCII 值为 98,因此如果将b打印为 int,您将得到 98。如果您希望它为 1,则必须从中减去 97 .这也会使a= 0、c= 2 等。这就是你要问的吗? -
什么是
mc?这段代码看起来非常复杂,本来应该很简单。此外,0-25 不允许您表示空格或标点符号……可能不是您想要的。 -
@JimGarrison mc 是一个包含消息的字符数组。即如果消息是“hello” mc[0]='h', mc[1]='e' 等等。我也不需要更改空格和标点符号,因此我只需要数字 0-25。此外,如果我只使用 ASCII 码值,加密方法将无法正常工作。 'A' 和 'a' 必须被视为“同一事物”
-
@MegumiAi 在这种情况下,您可以使用
mi[i]%32-1将A和a变为0 等。 -
注意:换行已经是 10(也可能是 13)
标签: java encryption char int