java中常见的加密

java中常见的加密

uuid

// 1 python中 直接导入模块,uuid.uuid4()
// 2 固定格式,永不重复的字符串:65fe0c8e - ac3f - 4bcb - bb0b - 7afe60e1dc31
	-生成全局唯一:可以用来做订单id号,手机设备的唯一id号
    -app端生成 uuid--存到本地--》每次发请求携带这个uuid
        
//3 java中
import java.util.UUID;
public class Hello {
    public static void main(String[] args){
        String uid = UUID.randomUUID().toString();
        System.out.println(uid);
    }
}

//4  python 中uuid生成
import uuid
uid = str(uuid.uuid4())
print(uid)

随机值

//1 java中 随机生成80位,8位是一个字节,10个字节  
BigInteger v4 = new BigInteger(80, new SecureRandom());
//  让字节以16进制展示
String res = v4.toString(16);
System.out.println(res);



// python 3.9
import random
data = random.randbytes(10)  // python3.9
ele_list = []
for item in data:
    ele = hex(item)[2:]
    ele_list.append(ele)
res = "".join(ele_list)
print(res)
// 或者
import random
data = "".join([hex(item)[2:] for item in random.randbytes(10)])
print(data)

时间戳

// java 代码
String t1 = String.valueOf(System.currentTimeMillis() / 1000); // 秒级别
String t2 = String.valueOf(System.currentTimeMillis()); // 毫秒级别
System.out.println(t1);
System.out.println(t2);
        

// python代码
import time
v1 = int(time.time())      // 秒级别
v2 = int(time.time()*1000) // 毫秒级别
print(v1)
print(v2)

十六进制字符串

// 方案1 使用转换符
 public static String bytesToHex(byte[] bytes) {  
        // 使用StringBuilder来构建最终的字符串  
        StringBuilder sb = new StringBuilder();  
        for (byte b : bytes) {  
            // 将每个字节转换为两位的十六进制数,并追加到StringBuilder中  
            sb.append(String.format("%02x", b));  
        }  
        // 返回构建的字符串  
        return sb.toString();  
    }  
// 方案2 采用与255 做与运算方案
 public static String bytesToHex(byte[] bytes) {  
        // 使用StringBuilder来构建最终的字符串  
        StringBuilder sb = new StringBuilder();  
        for (byte b : bytes) {  
            // 将每个字节转换为两位的十六进制数,并追加到StringBuilder中  
						int i = b & 0xFF;
            if (i < 16) {
              sb.append('0');
            }
            sb.append(Integer.toHexString(i));
        }  
        // 返回构建的字符串  
        return sb.toString();  
    }  

// python 实现
def byte_to_hex(s: str):
    b = s.encode('utf-8')
    l = [hex(i)[2:].rjust(2,'0') for i in b]

md5

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;


 public static String getMD5(String input) {
        try {
            // 创建一个MD5 MessageDigest 实例
            MessageDigest md = MessageDigest.getInstance("MD5");
            // 更新摘要以包含字节数组。
            md.update(input.getBytes());
            // 完成哈希计算,获取结果
            byte[] digest = md.digest();
            // 将得到的字节转换成十六进制表示
            StringBuilder hexString = new StringBuilder();
            for (byte b : digest) {
                String hex = Integer.toHexString(0xff & b);
                if(hex.length() == 1) hexString.append('0');
                hexString.append(hex);
            }
            // 返回32位十六进制字符串
            return hexString.toString();
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }
    }


// python 
import hashlib
obj = hashlib.md5('yyy'.encode('utf-8'))
obj.update('xxxxx'.encode('utf-8'))

// java中没有这个功能,把每个字节转换成16进制
v1 = obj.hexdigest()
print(v1) # d3c0aaaf596e3299f695591f00fd75cb

v2 = obj.digest()
print(v2)  //  b'\xd3\xc0\xaa\xafYn2\x99\xf6\x95Y\x1f\x00\xfdu\xcb'

base64编码

###java写法###
String name = "彭于晏";
# 编码
Base64.Encoder encoder  = Base64.getEncoder();
String res = encoder.encodeToString(name.getBytes());
System.out.println(res); #5b2t5LqO5pmP

# 解码
Base64.Decoder decoder  = Base64.getDecoder();
byte[] origin = decoder.decode(res);
String data = new String(origin);
System.out.println(data); // 彭于晏

###python写法####
import base64

name = "彭于晏"
res = base64.b64encode(name.encode('utf-8'))
print(res) # b'5b2t5LqO5pmP'

data = base64.b64decode(res)
origin = data.decode('utf-8')
print(origin) # "彭于晏"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

go&Python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值