一次一密加密、解密算法

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

一次一密密碼系統的一個重要特性是密鑰K爲一個真隨機序列,且密鑰只使用一次。java

下面經過計算機的僞隨機函數產生的隨機序列做爲密鑰來簡單演示一次一密的加密解密算法,代碼示例以下:算法

    /**
     * 一次一密加密、解密算法
     * @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. 一次一密加密、解密算法實例

完整代碼示例以下:dom

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
程序結束!
相關文章
相關標籤/搜索