【问题标题】:Encrypt and decrypt with swap使用交换加密和解密
【发布时间】:2021-02-11 14:35:31
【问题描述】:

我必须编写一个加密和解密函数。从纯文本转换为二进制,然后交换第二位和第三位。我正在考虑将纯文本更改为 ASCII 值,然后将它们转换为二进制,但我对如何交换它们和解密它感到困惑。

【问题讨论】:

  • 如果交换两个位,那么平均 50% 的字节将保持不变。
  • 亨利所说的。此外,除非您的算法有某种秘密输入,否则那将是编码,而不是加密,因为任何人都可以反转它。话虽如此,在 Java 中,您可以使用 String.getBytes 方法将字符串转换为字节。

标签: java encryption


【解决方案1】:

虽然这不安全,但你可以试试这个:

  public static void main(String[] args) {
        char[] text="Hello World".toCharArray();

        for (int i = 0; i < text.length; i++) {
            text[i]=encodingDecoding(text[i]);
        }
        System.out.println( new String(text).equals("Di``c,[c~`h"));

        for (int i = 0; i < text.length; i++) {
            text[i]=encodingDecoding(text[i]);
        }
        System.out.println( new String(text).equals("Hello World"));
    }

    public static char encodingDecoding(int n){
        int turningOffBit= n & 0xF3;//0xF3= 1111 0011
        //Extracting inverted bit 2 and 3 with a bit mask
        int bit2and3= n ^ 0xC;//0xC=  0000 1100
        return (char)(turningOffBit | bit2and3);
    }

}

【讨论】:

  • 这是翻转,位,而不是交换它们。此外,使用n ^ 0xC 可以更轻松地实现
  • 你说得对,我在思考过程中犯了一个错误,但n ^0xC 应该足够了
猜你喜欢
  • 2019-08-02
  • 1970-01-01
  • 1970-01-01
  • 2011-05-09
  • 2013-05-15
  • 2016-09-23
  • 1970-01-01
  • 2017-08-28
  • 2017-05-24
相关资源
最近更新 更多