zoukankan      html  css  js  c++  java
  • 位加密、解密算法

    位加密解密算法即将明文信息转化为二进制数据,然后对这些二进制位进行加密便得到密文。位加密算法依托于计算机的强大的位处理能力,在实际应用中非常流行。现代密码学中的很多加密、解密算法方案都依赖于位加密、解密思路,例如,非常流行的序列密码方案。

    1. 位加密、解密算法

      在java语言中,提供了6种位运算符,如下表所示。在密码学中,可以根据需要来选择合适的位运算符进行加密、解密。一般来说,使用异或运算要比较方便。

    位运算 名称
    & 按位与(AND)
    | 按位或(OR)
    ^ 按位异或(XOR)
    ~ 取反(NOT)
    << 左移
    >> 右移

    使用异或运算符进行加密、解密的一个好处是,在二进制运算中,如果将一个明文的二进制位与密钥进行按位“异或”运算,将得到密文;将此密文与密钥再次进行按位“异或”运算,又可以得到明文。这样,只需编写一个函数便可以同时完成加密和解密两种运算。

      可以根据此思路来编写相应的位加密、解密算法,代码示例如下:

        /**
         * 位加密解密算法
         * @param str 明文(密文)
         * @param n 密钥
         * @return 密文(明文)
         */
        static char[] bitcode(char[] str, char n){
            int len,i;
            char[] wen;
            len=str.length;
            wen = new char[len];
            for(i=0;i<len;i++){
                wen[i]=(char) (str[i]^n);
            }
            return wen;
        }

    2. 位加密、解密算法实例

    完整的程序代码示例如下:

    package com.cn.mimaxue;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Scanner;
    
    //位加密、解密算法
    public class BitJiami {
        /**
         * 位加密解密算法
         * @param str 明文(密文)
         * @param n 密钥
         * @return 密文(明文)
         */
        static char[] bitcode(char[] str, char n){
            int len,i;
            char[] wen;
            len=str.length;
            wen = new char[len];
            for(i=0;i<len;i++){
                wen[i]=(char) (str[i]^n);
            }
            return wen;
        }
        
        public static void main(String[] args) throws IOException {
            char[] str,miwen,jiemi;
            int i;
            char n;
            String go;
            System.out.println("位加密解密算法演示!");
            Scanner input = new Scanner(System.in);
            do{
                System.out.print("请输入位加密解密算法的密钥:");
                n = input.next().charAt(0);
                System.out.print("请输入明文:");
                BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                String strtemp=br.readLine();
                str=strtemp.toCharArray();
                System.out.print("明文为:");
                for(i=0;i<str.length;i++){
                    System.out.print(str[i]);
                }
                System.out.println();
                miwen=bitcode(str,n);
                System.out.print("密文为:");
                for(i=0;i<miwen.length;i++){
                    System.out.print(miwen[i]);
                }
                System.out.println();
                jiemi=bitcode(miwen,n);
                System.out.print("解密为:");
                for(i=0;i<jiemi.length;i++){
                    System.out.print(jiemi[i]);
                }
                System.out.println();
                System.out.print("是否继续(y/n):");
                go = input.next();
            }while(go.equalsIgnoreCase("y")); 
            System.out.println("退出程序!");
    
        }
    
    }

    程序运行结果如下:

    位加密解密算法演示!
    请输入位加密解密算法的密钥:5
    请输入明文:Hello everyone!
    明文为:Hello everyone!
    密文为:}PYYZPCPGLZ[P
    解密为:Hello everyone!
    是否继续(y/n):y
    请输入位加密解密算法的密钥:9
    请输入明文:The big bang theory!
    明文为:The big bang theory!
    密文为:mQ[P^[XW^MQVK@
    解密为:The big bang theory!
    是否继续(y/n):n
    退出程序!
  • 相关阅读:
    毕业进度10
    毕业进度9
    毕业进度8
    毕业设计7
    毕业设计6
    java算法每日一练2021/1/26
    java算法每日一练2021/1/23
    java算法每日一练2021/1/21
    java算法每日一练2021/1/20
    java算法每日一练2021-01-18
  • 原文地址:https://www.cnblogs.com/gaopeng527/p/4518111.html
Copyright © 2011-2022 走看看