总结5种常用加密算法

news2024/9/30 23:48:57

前言

在平时的工作中,可能也在很多地方用到了加密、解密,比如:

  • 用户的密码不能明文存储,要存储加密后的密文

  • 用户的银行卡号、身份证号之类的敏感数据,需要加密传输

  • 还有一些重要接口,比如支付,客户端要对请求生成一个签名,服务端要对签名进行验证

  • ……

那么上面提到的这些能力,都可以利用哪些加密算法来实现呢?接着往下看。 

常见加密算法

算法整体上可以分为不可逆加密,以及可逆加密,可逆加密又可以分为对称加密非对称加密

不可逆算法 

不可逆加密的算法的加密是不可逆的,密文无法被还原成原文。

散列算法,就是一种不可逆算法。散列算法中,明文通过散列算法生成散列值,散列值是长度固定的数据,和明文长度无关。

散列算法的具体实现有很多种,常见的包括MD5、SHA1、SHA-224、SHA-256等等。

散列算法常用于数字签名、消息认证、密码存储等场景。

散列算法是不需要密钥的,当然也有一些不可逆算法,需要密钥,例如HMAC算法。

MD5加密

MD5,全称为“Message-Digest Algorithm 5”,翻译过来叫“信息摘要算法”。它可以将任意长度的数据通过散列算法,生成一个固定长度的散列值。MD5算法的输出长度为128位,通常用32个16进制数表示。

来看下MD5算法的Java代码实现:

public class MD5 {

    private static final String MD5_ALGORITHM = "MD5";

    public static String encrypt(String data) throws Exception {
        // 获取MD5算法实例
        MessageDigest messageDigest = MessageDigest.getInstance(MD5_ALGORITHM);
        // 计算散列值
        byte[] digest = messageDigest.digest(data.getBytes());
        Formatter formatter = new Formatter();

        // 补齐前导0,并格式化
        for (byte b : digest) {
            formatter.format("%02x", b);
        }

        return formatter.toString();
    }

    public static void main(String[] args) throws Exception {
        String data = "Hello World";
        String encryptedData = encrypt(data);
        System.out.println("加密后的数据:" + encryptedData);
    }

}

MD5有一些优点,比如计算速度快、输出长度固定、应用广泛等等。

但是作为一个加密算法,它有一个天大的缺点,那就是不安全

MD5算法已经被攻破,而且MD5算法的输出长度有限,攻击者可以通过暴力破解或彩虹表攻击等方式,找到与原始数据相同的散列值,从而破解数据。

虽然可以通过加盐,也就是对在原文里再加上一些不固定的字符串来缓解,但是完全可以用更安全的SHA系列算法替代。

SHA-256算法

SHA(Secure Hash Algorithm)系列算法是一组密码散列函数,用于将任意长度的数据映射为固定长度的散列值。SHA系列算法由美国国家安全局(NSA)于1993年设计,目前共有SHA-1、SHA-2、SHA-3三种版本。

其中SHA-1系列存在缺陷,已经不再被推荐使用。

SHA-2算法包括SHA-224SHA-256SHA-384SHA-512四种散列函数,分别将任意长度的数据映射为224位、256位、384位和512位的散列值。

来看一下最常用的SHA-256的Java代码实现:

public class SHA256 {

    private static final String SHA_256_ALGORITHM = "SHA-256";

    public static String encrypt(String data) throws Exception {
        //获取SHA-256算法实例
        MessageDigest messageDigest = MessageDigest.getInstance(SHA_256_ALGORITHM);
        //计算散列值
        byte[] digest = messageDigest.digest(data.getBytes());
        StringBuilder stringBuilder = new StringBuilder();

        //将byte数组转换为15进制字符串
        for (byte b : digest) {
            stringBuilder.append(Integer.toHexString((b & 0xFF) | 0x100), 1, 3);
        }

        return stringBuilder.toString();
    }

    public static void main(String[] args) throws Exception {
        String data = "Hello World";
        String encryptedData = encrypt(data);
        System.out.println("加密后的数据:" + encryptedData);
    }

}

SHA-2算法之所以比MD5强,主要有两个原因:

  • 散列值长度更长:例如SHA-256算法的散列值长度为256位,而MD5算法的散列值长度为128位,这就提高了攻击者暴力破解或者彩虹表攻击的难度。

  • 更强的碰撞抗性:SHA算法采用了更复杂的运算过程和更多的轮次,使得攻击者更难以通过预计算或巧合找到碰撞。

当然,SHA-2也不是绝对安全的,散列算法都有被暴力破解或者彩虹表攻击的风险,所以,在实际的应用中,加盐还是必不可少的。

对称加密算法 

对称加密算法,使用同一个密钥进行加密和解密。

加密和解密过程使用的是相同的密钥,因此密钥的安全性至关重要。如果密钥泄露,攻击者可以轻易地破解加密数据。

常见的对称加密算法包括DES、3DES、AES等。其中,AES算法是目前使用最广泛的对称加密算法之一,具有比较高的安全性和加密效率。

DES算法

DES(Data Encryption Standard)算法是一种对称加密算法,由IBM公司于1975年研发,是最早的一种广泛应用的对称加密算法之一。

DES算法使用56位密钥对数据进行加密,加密过程中使用了置换、替换、异或等运算,具有较高的安全性。

来看下DES算法的Java代码实现:

public class DES {

    private static final String DES_ALGORITHM = "DES";

    /**
     * DES加密
     *
     * @param data 待加密的数据
     * @param key  密钥,长度必须为8位
     * @return 加密后的数据,使用Base64编码
     */
    public static String encrypt(String data, String key) throws Exception {
        // 根据密钥生成密钥规范
        KeySpec keySpec = new DESKeySpec(key.getBytes());
        // 根据密钥规范生成密钥工厂
        SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance(DES_ALGORITHM);
        // 根据密钥工厂和密钥规范生成密钥
        SecretKey secretKey = secretKeyFactory.generateSecret(keySpec);

        // 根据加密算法获取加密器
        Cipher cipher = Cipher.getInstance(DES_ALGORITHM);
        // 初始化加密器,设置加密模式和密钥
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        // 加密数据
        byte[] encryptedData = cipher.doFinal(data.getBytes());
        // 对加密后的数据进行Base64编码
        return Base64.getEncoder().encodeToString(encryptedData);
    }

    /**
     * DES解密
     *
     * @param encryptedData 加密后的数据,使用Base64编码
     * @param key           密钥,长度必须为8位
     * @return 解密后的数据
     */
    public static String decrypt(String encryptedData, String key) throws Exception {
        // 根据密钥生成密钥规范
        KeySpec keySpec = new DESKeySpec(key.getBytes());
        // 根据密钥规范生成密钥工厂
        SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance(DES_ALGORITHM);
        // 根据密钥工厂和密钥规范生成密钥
        SecretKey secretKey = secretKeyFactory.generateSecret(keySpec);

        // 对加密后的数据进行Base64解码
        byte[] decodedData = Base64.getDecoder().decode(encryptedData);
        // 根据加密算法获取解密器
        Cipher cipher = Cipher.getInstance(DES_ALGORITHM);
        // 初始化解密器,设置解密模式和密钥
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        // 解密数据
        byte[] decryptedData = cipher.doFinal(decodedData);
        // 将解密后的数据转换为字符串
        return new String(decryptedData);
    }

    public static void main(String[] args) throws Exception {
        String data = "Hello World";
        String key = "12345678"; 

        String encryptedData = encrypt(data, key);
        System.out.println("加密后的数据:" + encryptedData);

        String decryptedData = decrypt(encryptedData, key);
        System.out.println("解密后的数据:" + decryptedData);
    }

}

DES的算法速度较快,但是在安全性上面并不是最优选择,因为DES算法的密钥长度比较短,被暴力破解和差分攻击的风险比较高,一般推荐用一些更安全的对称加密算法,比如3DES、AES。

AES算法

AES(Advanced Encryption Standard)即高级加密标准,是一种对称加密算法,被广泛应用于数据加密和保护领域。AES算法使用的密钥长度为128位、192位或256位,比DES算法的密钥长度更长,安全性更高。

来看下AES算法的Java代码实现:

public class AES {

    private static final String AES_ALGORITHM = "AES";

    // AES加密模式为CBC,填充方式为PKCS5Padding
    private static final String AES_TRANSFORMATION = "AES/CBC/PKCS5Padding";

    // AES密钥为16位
    private static final String AES_KEY = "1234567890123456";

    // AES初始化向量为16位
    private static final String AES_IV = "abcdefghijklmnop";

    /**
     * AES加密
     *
     * @param data 待加密的数据
     * @return 加密后的数据,使用Base64编码
     */
    public static String encrypt(String data) throws Exception {
        // 将AES密钥转换为SecretKeySpec对象
        SecretKeySpec secretKeySpec = new SecretKeySpec(AES_KEY.getBytes(), AES_ALGORITHM);
        // 将AES初始化向量转换为IvParameterSpec对象
        IvParameterSpec ivParameterSpec = new IvParameterSpec(AES_IV.getBytes());
        // 根据加密算法获取加密器
        Cipher cipher = Cipher.getInstance(AES_TRANSFORMATION);
        // 初始化加密器,设置加密模式、密钥和初始化向量
        cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);
        // 加密数据
        byte[] encryptedData = cipher.doFinal(data.getBytes(StandardCharsets.UTF_8));
        // 对加密后的数据使用Base64编码
        return Base64.getEncoder().encodeToString(encryptedData);
    }

    /**
     * AES解密
     *
     * @param encryptedData 加密后的数据,使用Base64编码
     * @return 解密后的数据
     */
    public static String decrypt(String encryptedData) throws Exception {
        // 将AES密钥转换为SecretKeySpec对象
        SecretKeySpec secretKeySpec = new SecretKeySpec(AES_KEY.getBytes(), AES_ALGORITHM);
        // 将AES初始化向量转换为IvParameterSpec对象
        IvParameterSpec ivParameterSpec = new IvParameterSpec(AES_IV.getBytes());
        // 根据加密算法获取解密器
        Cipher cipher = Cipher.getInstance(AES_TRANSFORMATION);
        // 初始化解密器,设置解密模式、密钥和初始化向量
        cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);
        // 对加密后的数据使用Base64解码
        byte[] decodedData = Base64.getDecoder().decode(encryptedData);
        // 解密数据
        byte[] decryptedData = cipher.doFinal(decodedData);
        // 返回解密后的数据
        return new String(decryptedData, StandardCharsets.UTF_8);
    }

    public static void main(String[] args) throws Exception {
        String data = "Hello World";

        String encryptedData = encrypt(data);
        System.out.println("加密后的数据:" + encryptedData);

        String decryptedData = decrypt(encryptedData);
        System.out.println("解密后的数据:" + decryptedData);
    }

}

AES算法采用的密钥长度更长,密钥空间更大,安全性更高,能够有效地抵抗暴力破解攻击。

当然,因为密钥长度较长,需要的存储也更多。

对于对称加密算法而言,最大的痛点就在于密钥管理困难,相比而言,非对称加密就没有这个担忧。

非对称加密算法

非对称加密算法需要两个密钥,这两个密钥互不相同,但是相互匹配,一个称为公钥,另一个称为私钥

使用其中的一个加密,则使用另一个进行解密。例如使用公钥加密,则需要使用私钥解密。

RSA算法

RSA算法是是目前应用最广泛的非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman三人在1978年发明,名字来源三人的姓氏首字母。

来看下RSA算法的Java实现:

public class RSA {

    private static final String RSA_ALGORITHM = "RSA";

    /**
     * 生成RSA密钥对
     *
     * @return RSA密钥对
     */
    public static KeyPair generateKeyPair() throws NoSuchAlgorithmException {
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(RSA_ALGORITHM);
        // 密钥大小为2048位
        keyPairGenerator.initialize(2048);
        return keyPairGenerator.generateKeyPair();
    }

    /**
     * 使用公钥加密数据
     *
     * @param data      待加密的数据
     * @param publicKey 公钥
     * @return 加密后的数据
     */
    public static String encrypt(String data, PublicKey publicKey) throws Exception {
        Cipher cipher = Cipher.getInstance(RSA_ALGORITHM);
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] encryptedData = cipher.doFinal(data.getBytes(StandardCharsets.UTF_8));
        return Base64.getEncoder().encodeToString(encryptedData);
    }

    /**
     * 使用私钥解密数据
     *
     * @param encryptedData 加密后的数据
     * @param privateKey    私钥
     * @return 解密后的数据
     */
    public static String decrypt(String encryptedData, PrivateKey privateKey) throws Exception {
        byte[] decodedData = Base64.getDecoder().decode(encryptedData);
        Cipher cipher = Cipher.getInstance(RSA_ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        byte[] decryptedData = cipher.doFinal(decodedData);
        return new String(decryptedData, StandardCharsets.UTF_8);
    }

    /**
     * 使用私钥加密数据
     *
     * @param data       待加密的数据
     * @param privateKey 私钥
     * @return 加密后的数据
     */
    public static String encrypt(String data, PrivateKey privateKey) throws Exception {
        Cipher cipher = Cipher.getInstance(RSA_ALGORITHM);
        //读取私钥,进行加密
        cipher.init(Cipher.ENCRYPT_MODE, privateKey);
        //加密
        byte[] decryptedData = cipher.doFinal(data.getBytes());
        return Base64.getEncoder().encodeToString(decryptedData);
    }

    /**
     * 使用公钥解密数据
     *
     * @param encryptedData 加密后的数据
     * @param publicKey     公钥
     * @return 解密后的数据
     */
    public static String decrypt(String encryptedData, PublicKey publicKey) throws Exception {
        byte[] decodedData = Base64.getDecoder().decode(encryptedData);
        Cipher cipher = Cipher.getInstance(RSA_ALGORITHM);
        //读取公钥,进行解密
        cipher.init(Cipher.DECRYPT_MODE, publicKey);
        //解密
        byte[] decryptedData = cipher.doFinal(decodedData);
        //得到明文
        return new String(decryptedData, StandardCharsets.UTF_8);
    }

    public static void main(String[] args) throws Exception {
        KeyPair keyPair = generateKeyPair();
        PublicKey publicKey = keyPair.getPublic();
        PrivateKey privateKey = keyPair.getPrivate();

        String data = "Hello World";

        String publicKeyEncryptedData = encrypt(data, publicKey);
        System.out.println("公钥加密后的数据:" + publicKeyEncryptedData);

        String privateKeyDecryptedData = decrypt(publicKeyEncryptedData, privateKey);
        System.out.println("私钥解密后的数据:" + privateKeyDecryptedData);

        String privateKeyEncryptedData = encrypt(data, privateKey);
        System.out.println("私钥加密后的数据:" + privateKeyEncryptedData);

        String publicKeyDecryptedData = decrypt(privateKeyEncryptedData, publicKey);
        System.out.println("公钥解密后的数据:" + publicKeyDecryptedData);
    }

}

RSA算法的优点是安全性高,公钥可以公开,私钥必须保密,保证了数据的安全性;可用于数字签名、密钥协商等多种应用场景。

缺点是加密、解密速度较慢,密钥长度越长,加密、解密时间越长;密钥长度过短容易被暴力破解,密钥长度过长则会增加计算量和存储空间的开销。

总结

这里简单总结了一下最常用的5种加密算法。

其实,论到加密解密算法的应用,有一个东西,可以说是应用到了极致,它是什么呢?

—— HTTPS

简单回忆一下HTTPS的工作流程,和用到的加密算法:

  1. 客户端发起HTTPS请求:用户使用浏览器输入网址访问HTTPS站点,准备发起HTTPS请求。

  2. 服务端提供证书:服务器返回公钥证书,证书包含了服务器的公钥、颁发者(证书颁发机构)等信息。

  3. 客户端验证证书:浏览器验证证书的有效性、合法性、来源等,校验证书的过程用到了非对称加密散列算法。

    • 客户端使用证书颁发机构的公钥对证书进行验证,保证证书的真实性和合法性。

    • 客户端使用证书中的公钥对服务端的数字签名进行验证,保证服务器的身份和数据的完整性。

    • 客户端使用散列算法计算出散列值,和证书种的散列值进行对比,保证证书的完整性。

  4. 客户端生成对称密钥:客户端生成一个随机数,作为对称密钥。

  5. 对称密钥加密传输:客户端使用服务器的公钥对随机数进行加密,然后将加密后的信息传输给服务器。

  6. 服务端获取对称密钥:服务端使用私钥解密客户端发送的对称密钥,得到对称密钥。

  7. 客户端与服务器使用对称密钥进行通信:服务器与浏览器都使用对称密钥对数据进行加密和解密,以此确保数据传输的安全性。

在数据传输的过程中,也用到了散列算法:

  • 消息摘要:在数据传输过程中,客户端和服务器都使用散列算法计算消息的散列值,对方收到消息后,会对散列值进行比较,确保传输数据的完整性。

总之,HTTPS使用了对称加密算法、非对称加密算法、散列算法来保证数据的安全性和完整性,从而确保了通信双方的身份和数据的安全。

 

至于具体使用哪些加密算法,取决于SSL/TLS协议的版本以及协商过程中选定的加密套件。在实际的网络环境中,很多加密算法可能会被淘汰,以适应更高安全性的需要。

在日常的开发中,也可以借鉴相应的思路,灵活运用各种加密算法,让应用更加安全、更加健壮。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/686985.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux conda 环境迁移 服务器之间迁移

网上很多方法语焉不详,本文主要介绍在Linux系统之间进行单一环境迁移,从服务器A迁移到服务器B的两种方式: conda list方式进行Linux系统在线环境迁移拷贝envs方式进行Linux系统离线环境迁移 conda list方式 迁移完毕后需要手动安装缺失的py…

ProcessOn思维导图流程图 超厉害的入门指南

如果你刚刚认识ProcessOn,不知道从哪里开始,希望这篇内容可以帮助到你。ProcessOn 是什么? ProcessOn 是一款专业的在线思维导图流程图软件。 专业强大的作图工具,支持多人实时在线协作,可用于原型图、UML、BPMN、网络拓扑图等多种…

INDEMIND双目视觉惯性模组实时生成点云并保存点云图

双目惯性相机最开始是从VINS中了解到的,2018年VINS中推荐过Loitor视觉惯性相机,但是后来看到GitHub Issue中有人反映Loitor丢帧、无技术支持等问题,加之购入渠道非官方故未入手Loitor,浏览知乎时关注到Indemind的该款产品&#xf…

AI绘画:Roop插件的特性与安装!

交叉”学科”来了! 我们之前讲过可以实现单图换脸的Roop,也讲过可以通过文字描述画画的项目Stable-Diffusion-WebUI。现在这两者要通过sd-webui-roop产生交汇。 我们先来简单的看一下这个插件可以干什么! 功能特点 根据项目作者的说法&…

JavaScript二叉树及各种遍历算法详情

目录 什么是二叉树 满二叉树完全二叉树二叉树的存储 数组存储链表存储与二叉树相关的算法 深度优先遍历广度优先遍历先序遍历中序遍历后序遍历 前言: 上一篇文章中介绍了树的概念、深度优先遍历和广度优先遍历,这篇文章我们来学习一个特殊的树——二叉树。 什么是…

【计算机图形学】期末复习,选择题+判断题篇

【计算机图形学】期末复习,选择题判断题篇 题目来源于百度、B站、中国大学慕课网,适用于期末复习,内容仅供参考,祝大家考试顺利通过!!! 文章目录 【计算机图形学】期末复习,选择题判…

App压力稳定性测试之Monkey

目录 前言: 一、Monkey简介 二、monkey常见命令 三、日志导出 前言: Monkey测试是一种黑盒测试方法,用于测试Android应用程序的压力稳定性,目的是评估应用在极端情况下是否能够稳定、可靠地工作。它是Android SDK自带的一个工…

起动元件框图原理

(一)起动元件作用 为了提高保护动作的可靠性,保护装置的出口均经起动元件闭锁,只有在保护起动元 件起动后,保护装置出口闭锁才被解除。在微机保护装置里,起动元件是由软件来完成的。起动元件起动后&#…

鞣花酸爆增1226%?油橄榄、雪绒花大展拳脚? | 5月功效成分TOP100

数说故事联合用户说共创的5月功效成分榜单如约而至。 本期依旧是你最关注的两大榜单:5月用户最关注功效成分声量TOP100和5月用户最关注功效成分变量TOP100。 榜单通过整合全网社交媒体的声量,并构建指数体系,实时动态监控互联网关键成分的声…

RabbitMQ消息队列的工作模式

文章目录 1.RabbitMQ常用的工作模式2.简单模式3.WorkQueues工作队列模式4.Pub/Sub发布订阅模式5.Routing路由模式6.Topics通配符模式 1.RabbitMQ常用的工作模式 官方文档地址:https://www.rabbitmq.com/getstarted.html 工作模式其实就是消息队列分发消息的路由方…

mysql死锁问题分析

死锁问题分析 起因 起因是线上报了一个死锁问题,然后我就去查看下死锁的原因。 思路 死锁问题的排查, **日常工作中,应对各类线上异常都要有我们自己的 SOP (标准作业流程) ** ,这样不仅能够提高自己的处理问题效率&#xff…

智能本质上是人性的拓扑

智能技术的发展是基于人类智慧和思维方式的延伸和拓展,人类的智慧和思维方式是智能的基础,人类是智能技术的创造者和主导者。然而,人工智能技术却与人性并不一致,根本上,人工智能技术并不具备人类的情感、道德、意识等…

适配器模式(Adapter)

定义 适配器是一种结构型设计模式,它能使接口不兼容的对象能够相互合作。 别名 封装器模式(Wrapper)。 前言 1. 问题 假如你正在开发一款股票市场监测程序,它会从不同来源下载 XML 格式的股票数据,然后向用户呈现…

通过skia导出pdf 生成超链接 skia pdfdocument annotation pdflink

如题 最近导出pdf ,想实现文本支持超链接跳转, 看了下skia的官网文档, 翻墙找各种资料 就是找不到关于怎么实现,毫无头绪咋办呢 我想了一下 1.粗略翻阅了下pdf的格式 了解了下基本的构成 啥root page text 啥的 2.通过pdf格式了解到 链接是通过LinkAn…

npm发布自己的公网包步骤详解

初始化项目 比如我,创建了code-transfor-text_vue项目 根目录初始化git git init .建立开源协议 给项目根目录手动创建LICENSE文件文件,没有后缀名 MIT LicenseCopyright (c) 2023 quanyiPermission is hereby granted, free of charge, to any pers…

Verdaccio搭建本地npm仓库

背景 Verdaccio 是一个 Node.js创建的轻量的私有npm proxy registry 我们在开发npm包的时候,经常需要验证发包流程,或者开发的npm包仅局限于公司内部使用时,就可以借助Verdaccio搭建一个npm仓库,搭建完之后,只要更改np…

DataLeap的全链路智能监控报警实践(二):概念介绍

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 概念介绍 基线监控 根据监控规则和任务运行情况,DataLeap的基线监控能够决策是否报警、何时报警、如何报警以及给谁报警。它保障的是任务整体产出链路&a…

MySQL 数据库操作指南:学习如何使用 Python 进行增删改查操作

文章目录 MySQL 知识点1.1 数据库创建和选择1.2 数据表创建和修改1.3 插入数据1.4 查询数据1.5 更新和删除数据 1.6 索引的创建和使用1.7 外键的使用 Python 中使用 MySQL2.1 连接数据库2.2 创建数据库和数据表2.3 插入数据2.4 查询数据2.5 更新和删除数据2.6 关闭连接 2.7 数据…

【算法系列之贪心算法I】leetcode376. 摆动序列

455.分发饼干 力扣题目链接 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j&…

详细讲解!接口性能测试方案

目录 前言: 性能测试术语解释 性能测试方法及目标 性能需求分析 性能测试范围 性能测试用例与场景 性能测试工具选择 性能测试结果分析 性能测试通过标准 前言: 接口性能测试是指测试系统中各个接口的性能,包括响应时间、吞吐量、并…