用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]

|| (data[i] >='A' && data[i]

) {

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值