自定义简单加密算法

chi*_*kei 2 encryption algorithm

如果有人知道这些算法的含义,请帮助我理解,因为我不想简单地复制而不知道它是如何工作的.

这是代码:

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();
    }
Run Code Online (Sandbox Code Playgroud)

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();
    }
Run Code Online (Sandbox Code Playgroud)

再次感谢

Ada*_*iss 8

这些是两种简单和标准(并且完全不安全,但这是一种学习体验)以可逆方式改变数据的方法.

第一个用于ch = ~ch;切换字符中的所有位.因此,例如,字母a,即ASCII 97或二进制01100001,将成为10011110.这是可逆的,因为您可以对加密数据应用完全相同的操作来检索原始邮件.

第二个稍微更安全,并使用^(exclulsive-or)运算符根据键更改每个字符中的位:将消息字符中的每个位与键字符中的相应位进行比较.如果位相同(两者0或两者1),则加密位为0.如果位不同,则加密位为1.这是可逆的,因为您可以^使用相同的密钥再次应用相同的操作来检索原始邮件.

作为旁注,所有现代密码(例如DES3和AES)都基于异或操作,并结合了以指定方式"混合"位的算法,因此猜测密钥要困难得多.可以通过反向运行算法或通过采用数学上等效的计算捷径来解密密文.

警告和咆哮: 这显然是家庭作业,你已经承认你和你的朋友都在通过复制别人的答案作弊.如果你不能解释它,那就更糟了,特别是因为我向你保证,所有参加课程并复制答案的学生都会产生同样的2个解决方案.更愚蠢的是加密很简单:这一切都归结为翻转位.

所以这里是密码学的本质:

  • 记下邮件中的每个字符.
  • 根据你发明的一些规则,以某种方式修改角色.重要的是你必须能够反转这个规则,所以例如,总是将第3位设置为第16位0并且不能工作,因为你将不再知道它们原来是什么.但是交换第3和第6位会很好; 你只需要再次交换它们来解密.
  • 将修改后的字符作为加密文本附加到输出中.
  • 重复,直到你的字符用完.

要解密,请遵循相同的算法,但要反转用于修改每个字符的任何规则.

你不喜欢uifsf jt up ju.Hppe mvdl!

  • @chiaki_kei网络和加密通常密切相关,除非您的意思是仅在物理层面进行联网.无论哪种方式,抄袭家庭作业从来都不是一个好主意.如果我在大学里被抓到复制/粘贴代码,特别是我无法解释的代码,我至少会在课堂上收到0. (2认同)