如果在座的任何人知道这些算法的含义,请帮助我理解,因为我不想简单地复制而不知道它是如何工作的。
代码如下:
1:
public static String encryptKey(String key){
int ch = 0;
StringBuilder encryptedKey = new StringBuilder();
for(int i = 0; i < key.length(); i++ ){
ch = key.charAt(i);
ch = ~ch;
encryptedKey.append(ch);
}
return encryptedKey.toString();
}2:
public String encrypt(String message, String key){
StringBuilder encryptedMessage = new StringBuilder();
char ch;
int j = 0;
for(int i = 0; i < message.length(); i++, j++ ){
if(j >= key.length()){
j = 0;
}
ch = message.charAt(i);
ch = (char) (key.charAt(j) ^ ch);
encryptedMessage.append(ch);
}
return encryptedMessage.toString();
}谢谢,再次感谢
发布于 2012-05-15 10:14:26
这是两种以可逆方式更改数据的简单而标准的方法(虽然完全不安全,但这是一种学习经验)。
第一个使用ch = ~ch;来切换字符中的所有位。因此,例如,字母a,即ASCII97或二进制01100001,将变为10011110。这是可逆的,因为您可以对加密数据应用完全相同的操作来检索原始邮件。
第二种方法稍微更安全一些,它使用^ (exclulsive-or)运算符来根据密钥更改每个字符中的位:将消息字符中的每一位与密钥字符中的相应位进行比较。如果位相同( 0或1都相同),则加密位为0。如果位不同,则加密位为1。这是可逆的,因为您可以使用相同的键再次应用相同的^操作来检索原始消息。
作为附带说明,所有现代密码(如DES3和AES)都基于异或运算,并结合了一种以特定方式“混合”比特的算法,因此很难猜测密钥。密文可以通过反向运行算法或通过在数学上等效的计算捷径来解密。
警告和咆哮:这显然是家庭作业,你已经承认你和你的朋友抄袭别人的答案是作弊。尽管这可能很糟糕,但如果你不能解释它,那就更糟了,特别是因为我向你保证,每一个选修过这门课程并抄袭过答案的学生,都会得到这两个相同的解决方案。更糟糕的是,加密是非常简单的:这一切都归结为翻转比特。
下面是密码学的本质:
根据你发明的规则,以某种方式将message.
1,将第六位设置为0将不起作用,因为您将不再知道它们最初是什么。但是交换第3位和第6位也没问题;您只需再次交换它们,将修改后的字符作为加密文本decrypt.要解密,请遵循相同的算法,但要颠倒您用来修改每个字符的规则。
Uibu't bmm uifsf jt up ju.Hppe mvdl!
https://stackoverflow.com/questions/10593331
复制相似问题