zoukankan      html  css  js  c++  java
  • 用加密算法给女朋友写封情书

    1.常用加密算法

           有对称密码,公钥密码,单向散列函数,数字签名, 伪随机数生成器。

           明文:是指没有加密的文字(或者字符串),加密之前的文字。

           密文:加了密的的文字。

            MDS算法 :单向散列函数                                                             SHA算法: 单向散列函数,秒传。

    base64编码与解码:64个符号进行编码,多媒体信息追加到文本中。

        64个符号:a到z,A到Z,0到9,- +或者/


    对称密码

    (最古老的)凯撒密码:通过偏移来实现,比如偏移n位数 n=1 (hello就是ifmmp)。

    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.util.Arrays;
    
    /**
     * 工具类
     * @author Admin
     *
     */
    public class Util {
    
    	/**
    	 * 凯撒密码加密
    	 * @param msg 明文
    	 * @return 密文
    	 */
    	public static String toCaesar(String msg) {
    //		字符串转换成字符数组
    		char[] data =msg.toCharArray();
    		
    //		Arrays
    		System.out.println(Arrays.toString(data));
    		
    //		偏移(加密):把明文转换为密文
    //		每个字符偏移特定的位置:如love
    //		l,o,v,e
    		for (int i = 0; i < data.length; i++) {
    //			对每个字符进行处理,偏移 1
    //			char c = data[i];
    //		不是z的情况,才进行处理,标点符号除外
    			if((data[i]  >='a' && data[i] <'z')
    		|| (data[i] >='A' && data[i] <'Z')
    					) {
    			data[i]++;
    			}
    //			z?如何偏移
    			if(data[i]=='z') {
    				data[i]='a';
    			}
    			if(data[i]=='Z') {
    				data[i]='A';
    			}
    			
    //			todo,如果偏移是其他的值
    			
    			
    		}
    //		返回密文
    		return  new String(data);
    	}
    }

     


    package com.newer.demo;
    
    public class App {
    
    	public static void main(String[] args) {
    		
    //		a后面是b,中后面?
    //		中文 在UTF-8是 多个字节
    //		String msg=" i love u - zoom ? ZOOM";
    //		
    //		String msgCaesar= Util.toCaesar(msg);
    //		
    //		System.out.println(msgCaesar);
        }
    }

    控制台输出结果为:

    [ , i,  , l, o, v, e,  , u,  , -,  , z, o, o, m,  , ?,  , Z, O, O, M]
     j mpwf v - appn ? APPN

    公钥密码(非对称 RSA):加密与解密使用两个不同的密钥。
            https:使用混合加密方式。


    单向散列函数:不能解密。
            确保数据的完整性,存储用户口令。
            散列函数把输入的内容(长度不限),生成固定长度的内容,消息摘要,指纹。
            md5
            sha128
            sha256
            sha512
            比特币是散列算法。区块的摘要信息

    package com.newer.demo;
    
    import java.math.BigInteger;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.util.Arrays;
    
    /**
     * 工具类
     * @author Admin
     *
     */
    public class Util {
    
    
    
    
    	/**
    	 * 单向散列函数,生成摘要信息(数字指纹),过程不可逆(无法解密
    	 * @param text 目标数据:字符串,字节数组,文件
    	 * @return
    	 */
    	public static String toMD5(String text){
    //		消息摘要
    	try {
    		byte[] data=	MessageDigest.getInstance("MD5").digest(text.getBytes());
    //		字节数组转换成16进制数
    		return new BigInteger(1,data).toString(16);
    		
    	} catch (NoSuchAlgorithmException e) {
    		
    		e.printStackTrace();
    	}
    		return null;
    	}
    	
    /**
     * 
     * @param text
     * @return
     */
    	public static String toSha256(String text){
    //		消息摘要
    	try {
    		byte[] data=	MessageDigest.getInstance("SHA").digest(text.getBytes());
    //		字节数组转换成16进制数
    		return new BigInteger(1,data).toString(16);
    		
    	} catch (NoSuchAlgorithmException e) {
    		
    		e.printStackTrace();
    	}
    		return null;
    	}
    	
    }
    

    package com.newer.demo;
    
    public class App {
    
    	public static void main(String[] args) {
    		
    //		MD5---->32
    		System.out.println(Util.toMD5(""));
    		System.out.println(Util.toMD5("love"));
    		System.out.println(Util.toMD5("i love you"));
        	System.out.println(Util.toMD5("这是一段文本内容...很长,很长...."));
    		
    //	        SHA256--->64
    		System.out.println(Util.toSha256(""));
    		System.out.println(Util.toSha256("love"));
    		System.out.println(Util.toSha256(" I love you"));
    		System.out.println(Util.toSha256("这是一段文本内容...很长,很长...."));
    	}
    }
    

    控制台输出结果为:

    d41d8cd98f00b204e9800998ecf8427e
    b5c0b187fe309af0f4d35982fd961d7e
    459b9511a7f650ebd327889c45cc4e9b
    6801cad5e0c2a026f3d562c2b4ea13cd
    da39a3ee5e6b4b0d3255bfef95601890afd80709
    9f2feb0f1ef425b292f2f94bc8482494df430413
    f6de392817cbb574fa480f63fefc0b85f2f63c93
    6c8ba80d95708c301b6228b2258eebc895bb9810

     

  • 相关阅读:
    Dart语言--基础内容
    Vuex入门介绍
    videojs中文文档详解
    在Vue中如何使用axios请求拦截
    vue监听滚动事件,实现滚动监听(scroll滚动)
    font-family:中文字体的英文名称 (宋体 微软雅黑)
    VUE项目中按需引入ECharts.js
    VUE 重载组件
    【Web】网站主如何更改网页标签的图标(favicon.ico)
    我的电脑cmd命令引入sql数据库
  • 原文地址:https://www.cnblogs.com/firebet/p/12700870.html
Copyright © 2011-2022 走看看