1.gzip 加密
java的gzip加密:
import java.io.ByteArrayInputStream; | |
import java.io.ByteArrayOutputStream; | |
import java.util.Arrays; | |
import java.util.zip.GZIPInputStream; | |
import java.util.zip.GZIPOutputStream; | |
public class Hello { | |
public static void main(String[] args) { | |
try { | |
String data = "哈喽啊"; | |
// gzip压缩 | |
ByteArrayOutputStream v0_1 = new ByteArrayOutputStream(); | |
GZIPOutputStream v1 = new GZIPOutputStream(v0_1); | |
v1.write(data.getBytes()); | |
v1.close(); | |
byte[] arg6 = v0_1.toByteArray(); | |
System.out.println(Arrays.toString(arg6)); // 打印结果:[31, -117, 8, 0, 0, 0, 0, 0, 0, 0, 123, 58, -71, -29, -23, -76, -67, 79, -89, 118, 1, 0, 97, 15, -5, -43, 9, 0, 0, 0] | |
// gzip解压缩 | |
ByteArrayOutputStream out = new ByteArrayOutputStream(); | |
ByteArrayInputStream in = new ByteArrayInputStream(arg6); | |
GZIPInputStream ungzip = new GZIPInputStream(in); | |
byte[] buffer = new byte[256]; | |
int n; | |
while ((n = ungzip.read(buffer)) >= 0) { | |
out.write(buffer,0,n); | |
} | |
byte[] res = out.toByteArray(); | |
System.out.println(Arrays.toString(res));//打印结果:[-27, -109, -120, -27, -106, -67, -27, -107, -118] | |
System.out.println(out.toString("utf-8"));//打印结果:哈喽啊 | |
}catch (Exception e){ | |
System.out.println(e); | |
} | |
} | |
} |
python的gzip加密:
import gzip | |
#压缩 | |
data_in = "哈喽啊".encode('utf-8') | |
data_out = gzip.compress(data_in) | |
print(data_out)#打印结果:b'\x1f\x8b\x08\x00\x98wmb\x02\xff{:\xb9\xe3\xe9\xb4\xbdO\xa7v\x01\x00a\x0f\xfb\xd5\t\x00\x00\x00' | |
print(data_out.hex()) #打印16进制的加密数据:1f8b0800b9776d6202ff7b3ab9e3e9b4bd4fa7760100610ffbd509000000 | |
#解压缩 | |
res = gzip.decompress(data_out) | |
print(res) #打印解压缩后的utf-8编码:b'\xe5\x93\x88\xe5\x96\xbd\xe5\x95\x8a' | |
print(res.decode('utf-8')) # 将utf-8的编码,解码成字符串:哈喽啊 |
AES --加密
java的AES加密:
import javax.crypto.Cipher; | |
import javax.crypto.spec.IvParameterSpec; | |
import javax.crypto.spec.SecretKeySpec; | |
import java.security.MessageDigest; | |
import java.util.Arrays; | |
public class Hello { | |
public static void main(String[] args) { | |
String name = "哈喽啊"; | |
//设置AES加密的 key 和 iv | |
String key = "fehg123hjj216jjwqhe16i32kj1nkn22";//key必需是32位 | |
String iv = "77b07a672d57d643"; // iv 必须是16位 | |
//加密 | |
byte[] raw = key.getBytes(); | |
SecretKeySpec secretKey = new SecretKeySpec(raw,"AES"); | |
IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes()); | |
try { | |
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); | |
cipher.init(Cipher.DECRYPT_MODE,secretKey,ivSpec); | |
byte[] encrypted = cipher.doFinal(name.getBytes()); | |
System.out.println(Arrays.toString(encrypted)); | |
}catch (Exception e){ | |
System.out.println(e); | |
} | |
} | |
} |
python的AEC加密:
from Crypto.Cipher import AES | |
from Crypto.Util.Padding import pad | |
KEY= "fehg123hjj216jjwqhe16i32kj1nknnw" | |
IV ="77b07a672d57d64c" | |
def aes_encrypt(data_string): | |
aes = AES.new( | |
key = KEY.encode('utf-8'), | |
mode = AES.MODE_CBC, | |
iv = IV.encode('utf-8'), | |
) | |
raw = pad(data_string.encode("utf-8"),16) | |
return aes.encrypt(raw) | |
data = aes_encrypt("哈喽啊") | |
#将字节类型转成到16进制表示 | |
c = data.hex() | |
print(c) #打印结果:f30a976c22f42dbd7d6bf26fe2c84cc9 | |
print(data) # 打印结果(字节类型): b'\xf3\n\x97l"\xf4-\xbd}k\xf2o\xe2\xc8L\xc9' | |
print([i for i in data]) #打印结果(每个字节的ASCII码):[243, 10, 151, 108, 34, 244, 45, 189, 125, 107, 242, 111, 226, 200, 76, 201] |
加密算法 -- SHA-256
java的 SHA-256加密,几乎与 MD5加密的写法一样:
import java.security.MessageDigest; | |
import java.util.Arrays; | |
public class Hello { | |
public static void main(String[] args) { | |
String name = "哈喽啊"; | |
try { | |
MessageDigest instance = MessageDigest.getInstance("SHA-256"); | |
// md5的加盐 | |
instance.update("xxx".getBytes()); | |
// md5加密的字节数组 | |
byte[] nameBytes = instance.digest(name.getBytes()); | |
System.out.println(Arrays.toString(nameBytes));// 打印结果:[-16, 34, -105, -18, -53, -91, 98, 48, -40, 115, 11, 25, 22, 7, -108, 5, 24, 51, -38, 36, 17, 94, -3, -102, -6, -76, -61, -77, -29, 4, 107, 84] | |
String res = new String(nameBytes); | |
System.out.println(res); | |
//创建一个可变字符串 sb | |
StringBuilder sb = new StringBuilder(); | |
for (int i=0;i<nameBytes.length;i++){ | |
int val = nameBytes[i] & 255; //将负数转换成整数 | |
if (val < 16) { | |
sb.append("0"); | |
} | |
// 将val转换成16进制,再添加到sb这个可变的字符串中 | |
sb.append(Integer.toHexString(val)); | |
} | |
//再将可变的字符串sb ,转换成不可变的字符串 | |
String hexData = sb.toString(); | |
System.out.println(hexData); // 打印结果:f02297eecba56230d8730b19160794051833da24115efd9afab4c3b3e3046b54 | |
}catch (Exception e){ | |
System.out.println(e); | |
} | |
} | |
} |
md5加密- java与python的区别
python的md5加密
import hashlib | |
name = '哈喽啊' | |
obj = hashlib.md5() | |
# md5加盐 | |
obj.update('xxx'.encode('utf-8')) | |
# md5加密 | |
obj.update(name.encode('utf-8')) | |
# 获取加密后的数据,以字节的形式展示, | |
data = obj.digest() | |
print(data) # b'\x1c\x7f\xd2\x051\x87\xb2\x88\xe7\xfc\xb9\x8e\xf9\x9a\x94\xe1' | |
# 获取加密后的数据,以字符串的形式展示,本质是将 data 以16进制展示 | |
res = obj.hexdigest() | |
print(res) # 1c7fd2053187b288e7fcb98ef99a94e1 |
java的md5加密:
import java.nio.charset.StandardCharsets; | |
import java.security.MessageDigest; | |
import java.security.NoSuchAlgorithmException; | |
import java.util.Arrays; | |
import java.util.Base64; | |
public class Hello { | |
public static void main(String[] args) throws NegativeArraySizeException { | |
String name = "哈喽啊"; | |
try { | |
MessageDigest instance = MessageDigest.getInstance("MD5"); | |
// md5的加盐 | |
instance.update("xxx".getBytes()); | |
// md5加密的字节数组 | |
byte[] nameBytes = instance.digest(name.getBytes()); | |
System.out.println(Arrays.toString(nameBytes));// 打印结果:[28, 127, -46, 5, 49, -121, -78, -120, -25, -4, -71, -114, -7, -102, -108, -31] | |
String res = new String(nameBytes); | |
System.out.println(res); | |
//创建一个可变字符串 sb | |
StringBuilder sb = new StringBuilder(); | |
for (int i=0;i<nameBytes.length;i++){ | |
int val = nameBytes[i] & 255; //将负数转换成整数 | |
if (val < 16) { | |
sb.append("0"); | |
} | |
// 将val转换成16进制,再添加到sb这个可变的字符串中 | |
sb.append(Integer.toHexString(val)); | |
} | |
//再将可变的字符串sb ,转换成不可变的字符串 | |
String hexData = sb.toString(); | |
System.out.println(hexData); // 打印结果:1c7fd2053187b288e7fcb98ef99a94e1 | |
}catch (Exception e){ | |
System.out.println(e); | |
} | |
} | |
} |
Base64加密算法
java的Base64加密与解密
import java.util.Base64; | |
public class Hello { | |
public static void main(String[] args){ | |
String name = "哈喽啊"; | |
//base64,加密 | |
Base64.Encoder encoder = Base64.getEncoder(); | |
String res = encoder.encodeToString(name.getBytes()); | |
System.out.println(res); // 5ZOI5Za95ZWK | |
// base64,解密 | |
Base64.Decoder decoder = Base64.getDecoder(); | |
byte[] origin = decoder.decode(res); | |
String data = new String(origin); | |
System.out.println(data); | |
} | |
} |
python的Base64加密与解密:
import base64 | |
name = "哈喽啊" | |
#加密 | |
res = base64.b64encode(name.encode('utf-8')) | |
print(res) | |
#将res以utf-8方式解密成字节的形式 | |
data = base64.b64decode(res.decode('utf-8')) | |
#再将data以utf-8的方式解码成字符串的数据 | |
origin = data.decode('utf-8') | |
print(origin) |