位加密、解密算法

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

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^MQ\VK@

解密为:The big bang theory!

是否继续(y/n):n

退出程序!

 

你可能感兴趣的:(算法)