• 一次一密加密、解密算法


    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
    程序结束!
  • 相关阅读:
    synchronized 关键字
    synchronized 关键字
    Linux IPC之共享内存
    链表的插入、删除
    链式队列的实现
    链栈的实现
    双色、三色排序问题
    memmove、memcpy、strcpy、memset的实现
    字符串中去掉多余的空格
    华为机试:从一个数组中选取不同的数(均小于10)组成一个最大的三位数
  • 原文地址:https://www.cnblogs.com/gaopeng527/p/4518295.html
Copyright © 2020-2023  润新知