码迷,mamicode.com
首页 > 编程语言 > 详细

位加密、解密算法

时间:2015-05-20 22:00:44      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:

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

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
退出程序!

 

位加密、解密算法

标签:

原文地址:http://www.cnblogs.com/gaopeng527/p/4518111.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!