一次一密加密、解密算法

1. 一次一密加密、解密算法

一次一密密码系统的一个重要特性是密钥K为一个真随机序列,且密钥只使用一次。

下面通过计算机的伪随机函数产生的随机序列作为密钥来简单演示一次一密的加密解密算法,代码示例如下:

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

2. 一次一密加密、解密算法实例

完整代码示例如下:

package com.cn.mimaxue;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Random;
import java.util.Scanner;

//一次一密加密、解密算法
public class YiCiYiMi {
    static char[] key;
    /**
     * 一次一密加密、解密算法
     * @param str 明文(密文)
     * @param key 密钥
     * @return 密文(明文)
     */
    static char[] bitcode(char[] str, char[] key){
        int len,i;
        char[] wen;
        len = str.length;
        wen = new char[len];
        for(i=0;i<len;i++){
            wen[i]=(char) (str[i]^key[i]);
        }
        return wen;
    }
    
    public static void main(String[] args) throws IOException {
        int i,len;
        char[] str,miwen,mingwen;
        String go,strtemp;
        System.out.println("一次一密加密、解密算法示例!");
        Scanner input = new Scanner(System.in);
        do{
            System.out.print("请输入明文:");
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            strtemp=br.readLine();
            str=strtemp.toCharArray();
            len = str.length;
            System.out.print("明文为:");
            for(i=0;i<len;i++){
                System.out.print(str[i]);
            }
            System.out.println();
            key=new char[len];
            Random r = new Random();
            System.out.print("此次加密解密的密钥为:");
            for(i=0;i<len;i++){
                key[i]=(char) (r.nextInt(10)+'0');
                System.out.print(key[i]);
            }
            System.out.println();
            miwen=bitcode(str,key);
            System.out.print("加密为:");
            for(i=0;i<len;i++){
                System.out.print(miwen[i]);
            }
            System.out.println();
            mingwen=bitcode(miwen,key);
            System.out.print("解密为:");
            for(i=0;i<len;i++){
                System.out.print(mingwen[i]);
            }
            System.out.println();
            System.out.print("是否继续(y/n):");
            go=input.next();
        }while(go.equalsIgnoreCase("y"));
        System.out.println("程序结束!");
    }

}

程序运行结果如下:

一次一密加密、解密算法示例!
请输入明文:The big bang theory s04e01 is open!
明文为:The big bang theory s04e01 is open!
此次加密解密的密钥为:42989583756243065587039895046960089
加密为:`Z\[\_UTXUGXSZGAC
]    ]EY@UV
解密为:The big bang theory s04e01 is open!
是否继续(y/n):y
请输入明文:Hello, Tom is here!
明文为:Hello, Tom is here!
此次加密解密的密钥为:3116889387166891173
加密为:{T]ZWgWZ_EQTCR
解密为:Hello, Tom is here!
是否继续(y/n):n
程序结束!

 

posted @ 2015-05-20 21:46  ~风轻云淡~  阅读(9628)  评论(0编辑  收藏  举报