首页 > 编程语言 >python与java 对应的加密算法

python与java 对应的加密算法

时间:2023-04-26 16:23:13浏览次数:34  
标签:加密 java String python import data 加密算法 out

python与java 对应的加密算法

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)

标签:加密,java,String,python,import,data,加密算法,out
From: https://www.cnblogs.com/pdxt666/p/17356451.html

相关文章

  • redis,python操作哨兵,python操作集群,缓存优化,缓存击穿,穿透,雪崩
    python操作哨兵高可用架构后》不能直接连接某一个主库》主库可能会挂掉,后来他就不是主库了之前的连接redis操作就不能用了importredisconn=redis.Redis(host='',port=6379)conn.set()conn.close()新的连接哨兵的操作连接哨兵服务器(主机名也可以用做域名)配置文件#redi......
  • Python中的del、pop、remove、clear
    del是Python中的一个关键字,用于删除变量、列表元素、字典键值对等1.删除变量:可以使用del关键字来删除变量,例如:a=10dela2.删除列表元素:可以使用del关键字来删除列表中的元素,例如:list=[1,2,3,4,5]dellist[2]3.删除键值对dict={'name':'Tom',,'age':18}deldict['nam......
  • 全网最详细的Python安装教程
    https://zhuanlan.zhihu.com/p/569019068 1.首先打开下载配置环境  https://www.python.org/downloads/windows/ 2.64位操作系统:找到windowsx86-64executableinstaller并点击,耐心等待下载完成!3.安装python4.2-1下载完后双击点开python-3.7.4.exe 下面两个都 ......
  • 【go】go语言变量类型 常量 函数基础 函数高级 setuptools将python项目打包 前后端联
    目录昨日回顾使用setuptools将python项目打包前后端联调今日内容1go语言变量类型2常量3函数基础4函数高级补充昨日回顾使用setuptools将python项目打包#https://zhuanlan.zhihu.com/p/624648232#python----》setuptools--》whl包结构 公司内部写了包---》公司内部用---......
  • (一)asyncio的基本使用框架,python高效处理数据,asyncio.gather(),asyncio. create_task
    asyncio是Python3.4引入的标准库,是一个基于事件循环的异步I/O并发库。它提供了一种协作式的多任务处理方式,使得我们能够在一个线程中并发处理多个I/O操作。它通过将I/O操作转化为异步的非阻塞调用,从而实现了高效的并发处理。其原理如下: 定义协程(coroutine):使用关键......
  • JAVA笔记1
    Java的基础技术包括以下内容:Java语言基础:Java语言是一种面向对象的编程语言,具有丰富的数据类型、控制结构、类和对象等基本特性。Java程序员需要熟练掌握Java语法和语义规则,以便能够编写出正确、高效的代码。Java集合框架:Java集合框架是Java中用于管理和操作数据集合的一组A......
  • 数据科学 IPython 笔记本 7.4 Pandas 对象介绍
    7.4Pandas对象介绍原文:IntroducingPandasObjects译者:飞龙协议:CCBY-NC-SA4.0本节是《Python数据科学手册》(PythonDataScienceHandbook)的摘录。在最基本的层面上,Pandas对象可以认为是NumPy结构化数组的增强版本,其中行和列用标签而不是简单的整数索引来标识。我们将在本......
  • 数据科学 IPython 笔记本 7.6 Pandas 中的数据操作
    7.6Pandas中的数据操作原文:OperatingonDatainPandas译者:飞龙协议:CCBY-NC-SA4.0本节是《Python数据科学手册》(PythonDataScienceHandbook)的摘录。NumPy的一个重要部分是能够执行快速的逐元素运算,包括基本算术(加法,减法,乘法等),和更复杂的运算(三角函数,指数函数和对数函数等......
  • 数据科学 IPython 笔记本 7.3 Pandas 数据操作
    7.3Pandas数据操作原文:DataManipulationwithPandas译者:飞龙协议:CCBY-NC-SA4.0本节是《Python数据科学手册》(PythonDataScienceHandbook)的摘录。在前一章中,我们详细介绍了NumPy及其ndarray对象,它在Python中提供了密集类型数组的高效存储和操作。在这里,通过详细了解P......
  • java 实现PDF转TIFF 格式
    需要的依赖与代码实现下载jar直接引入本地  <dependency><groupId>com.sun.media</groupId><artifactId>jai_codec</artifactId><version>1.1-mr</version><scope>system</scope><systemPath>${p......