首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义简单加密算法

自定义简单加密算法
EN

Stack Overflow用户
提问于 2012-05-15 10:06:08
回答 1查看 5.1K关注 0票数 2

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

代码如下:

1:

代码语言:javascript
复制
    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:

代码语言:javascript
复制
    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();
    }

谢谢,再次感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-15 10:14:26

这是两种以可逆方式更改数据的简单而标准的方法(虽然完全不安全,但这是一种学习经验)。

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

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

作为附带说明,所有现代密码(如DES3和AES)都基于异或运算,并结合了一种以特定方式“混合”比特的算法,因此很难猜测密钥。密文可以通过反向运行算法或通过在数学上等效的计算捷径来解密。

警告和咆哮:这显然是家庭作业,你已经承认你和你的朋友抄袭别人的答案是作弊。尽管这可能很糟糕,但如果你不能解释它,那就更糟了,特别是因为我向你保证,每一个选修过这门课程并抄袭过答案的学生,都会得到这两个相同的解决方案。更糟糕的是,加密是非常简单的:这一切都归结为翻转比特。

下面是密码学的本质:

根据你发明的规则,以某种方式将message.

  • Modify中的每个字符转换为
  • 。重要的是,你必须能够颠倒这个规则,例如,总是将第三位设置为1,将第六位设置为0将不起作用,因为您将不再知道它们最初是什么。但是交换第3位和第6位也没问题;您只需再次交换它们,将修改后的字符作为加密文本decrypt.
  • Append到您的输出。重复
  • ,直到用完所有字符。

要解密,请遵循相同的算法,但要颠倒您用来修改每个字符的规则。

Uibu't bmm uifsf jt up ju.Hppe mvdl!

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10593331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档