Java常用加密方式

一,加密算法分类

对称加密:指加密和解密的密钥相同,优点就是加解密的效率高且易于实现。

非对称加密:指加密和解密的密钥不相同,也称为公私要加密。

不可逆加密:特征就是加密过程不需要密钥,并且加密后的数据不能被解密,只能输入同样的数据并且经过同样的不可逆加密算法才能获取同样的加密数据。

二,加密算法的应用

1.数字签名:进行身份认证和数据完整性验证,主要用到了非对称密钥加密技术与数字摘要技术。

2.数字证书:主要用来确保数字签名是安全有效的,数字证书由独立的证书发行机构发布。数字证书各不相同,每种证书可提供不同级别的可信度,该证书内包含用户的个人信息和他的公钥信息,同时还附有认证中心的签名信息。

3.MD5:对用户密码进行加密并进行保存。

4.网络数据加密:保障传输的数据安全,即使被截获报文,在没有密匙的情况下也无法得知报文真实内容。

5.SSL协议:在握手阶段使用的是非对称加密,在传输阶段使用的是对称加密,也就是说在SSL上传送的数据是使用对称密钥加密的。同时HTTPS也是由SSL+HTTP协议构建的可进行加密传输、身份认证(确认客户端连接的目标主机是否是真实正确的主机)的网络协议。

三,对称加密算法

  • 优点:算法对消息双方公开、计算量小、加解密速度快、效率高。

  • 缺点:在数据传送前,发送方和接收方必须商定好秘钥,然后双方保存好秘钥。如果一方的秘钥被泄露,那么加密信息就会被破解。

    3.1 DES介绍

    DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。但是近些年使用越来越少,因为DES使用56位密钥,以现代计算能力,24小时内即可被破解。

    DES加密和解密过程中,密钥长度都必须是8的倍数。

    Java代码实现:

    import javax.crypto.Cipher;
    import javax.crypto.SecretKey;
    import javax.crypto.SecretKeyFactory;
    import javax.crypto.spec.DESKeySpec;
    import java.nio.charset.StandardCharsets;
    import java.security.SecureRandom;/*** @ClassName: DESHelper* @Description:* @Author: Fufeng* @Date: 2022/7/31 20:45*/
    public class DESHelper {public String encrypt(String dataSource, String password) throws Exception {//DES算法要求有一个可信任的随机数源SecureRandom random = new SecureRandom();DESKeySpec desKey = new DESKeySpec(password.getBytes(StandardCharsets.UTF_8));//创建一个密钥工厂,然后用它对desKey进行转换SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");SecretKey secretKey = keyFactory.generateSecret(desKey);//Cipher对象实际完成加密操作Cipher cipher = Cipher.getInstance("DES");//用密钥初始化Cipher对象,ENCRYPT_MODE用于将Cipher初始化为加密模式的常量cipher.init(Cipher.ENCRYPT_MODE,secretKey,random);//正式对数据进行加密操作return new String(cipher.doFinal(dataSource.getBytes(StandardCharsets.UTF_8)));}public String decrypt(String src, String password) throws Exception {SecureRandom random = new SecureRandom();DESKeySpec desKey = new DESKeySpec(password.getBytes(StandardCharsets.UTF_8));SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");SecretKey secretKey = keyFactory.generateSecret(desKey);//Cipher对象实际完成解密操作Cipher cipher = Cipher.getInstance("DES");cipher.init(Cipher.DECRYPT_MODE,secretKey,random);return new String(cipher.doFinal(src.getBytes(StandardCharsets.UTF_8)));}
    }
    

    加解密测试:

        @Testpublic void DESTest() throws Exception {DESHelper desHelper = new DESHelper();String source = "满天星辰不及你!";System.out.println("原始数据:"+source);byte[] encryptData = desHelper.encrypt(source, "1qaz2wsx");System.out.println("加密后数据:"+encryptData);byte[] decryptData = desHelper.decrypt(encryptData, "1qaz2wsx");System.out.println("解密后数据:"+new String(decryptData));}
    
    3.2 IDEA介绍
    • 这种算法是在DES算法的基础上发展出来的,类似于三重DES。
    • 发展IDEA也是因为感到DES具有密钥太短等缺点。
    • DEA的密钥为128位,这么长的密钥在今后若干年内应该是安全的。

    Java代码实现:

    import org.bouncycastle.jce.provider.BouncyCastleProvider;import javax.crypto.Cipher;
    import javax.crypto.KeyGenerator;
    import javax.crypto.SecretKey;
    import javax.crypto.spec.SecretKeySpec;
    import java.security.Key;
    import java.security.Security;/*** @ClassName: IDEA* @Description:* @Author: Fufeng* @Date: 2022/7/31 21:07*/
    public class IDEAHelper {/*** 密钥算法* */public static final String KEY_ALGORITHM="IDEA";/*** 加密/解密算法/工作模式/填充方式* */public static final String CIPHER_ALGORITHM="IDEA/ECB/ISO10126Padding";/**** 生成密钥,只有bouncycastle支持* @return byte[] 二进制密钥* */public static byte[] initKey() throws Exception{//加入bouncyCastle支持Security.addProvider(new BouncyCastleProvider());//实例化密钥生成器KeyGenerator kg=KeyGenerator.getInstance(KEY_ALGORITHM);//初始化密钥生成器,IDEA要求密钥长度为128位kg.init(128);//生成密钥SecretKey secretKey=kg.generateKey();//获取二进制密钥编码形式return secretKey.getEncoded();}/*** 转换密钥* @param key 二进制密钥* @return Key 密钥* */public static Key toKey(byte[] key) throws Exception{//实例化DES密钥//生成密钥SecretKey secretKey=new SecretKeySpec(key,KEY_ALGORITHM);return secretKey;}/*** 加密数据* @param data 待加密数据* @param key 密钥* @return byte[] 加密后的数据* */public static byte[] encrypt(byte[] data,byte[] key) throws Exception{//加入bouncyCastle支持Security.addProvider(new BouncyCastleProvider());//还原密钥Key k=toKey(key);//实例化Cipher cipher=Cipher.getInstance(CIPHER_ALGORITHM);//初始化,设置为加密模式cipher.init(Cipher.ENCRYPT_MODE, k);//执行操作return cipher.doFinal(data);}/*** 解密数据* @param data 待解密数据* @param key 密钥* @return byte[] 解密后的数据* */public static byte[] decrypt(byte[] data,byte[] key) throws Exception{//加入bouncyCastle支持Security.addProvider(new BouncyCastleProvider());//还原密钥Key k =toKey(key);Cipher cipher=Cipher.getInstance(CIPHER_ALGORITHM);//初始化,设置为解密模式cipher.init(Cipher.DECRYPT_MODE, k);//执行操作return cipher.doFinal(data);}
    }
    

    加解密测试:

    @Test
    public void IDEATest() throws Exception {String str="满天星辰不及你!";System.out.println("原始数据:"+str);//初始化密钥byte[] key=IDEAHelper.initKey();System.out.println("密钥:"+ Base64.encodeBase64String(key));//加密数据byte[] data=IDEAHelper.encrypt(str.getBytes(), key);System.out.println("加密后数据:"+Base64.encodeBase64String(data));data=IDEAHelper.decrypt(data, key);System.out.println("解密后数据:"+new String(data));}
    

四,非对称加密算法

  • 优点:非对称加密与对称加密相比其安全性更好,只要私钥不泄露,很难被破解。
  • 缺点:加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
4.1 RSA介绍

RSA是目前最有影响力和最常用的公钥加密算法。它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。RSA公开密钥密码体制的原理是:根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

Java代码实现:

import org.apache.commons.codec.binary.Base64;import javax.crypto.Cipher;
import java.security.*;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.HashMap;
import java.util.Map;/*** @ClassName: RSAHelper* @Description:* @Author: Fufeng* @Date: 2022/8/1 20:57*/
public class RSAHelper {public static final String KEY_ALGORITHM = "RSA";public static final String SIGNATURE_ALGORITHM = "MD5withRSA";private static final String PUBLIC_KEY = "RSAPublicKey";private static final String PRIVATE_KEY = "RSAPrivateKey";public static byte[] decryptBASE64(String key) {return Base64.decodeBase64(key);}public static String encryptBASE64(byte[] bytes) {return Base64.encodeBase64String(bytes);}/*** 用私钥对信息生成数字签名** @param data 加密数据* @param privateKey 私钥* @return* @throws Exception*/public static String sign(byte[] data, String privateKey) throws Exception {// 解密由base64编码的私钥byte[] keyBytes = decryptBASE64(privateKey);// 构造PKCS8EncodedKeySpec对象PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);// KEY_ALGORITHM 指定的加密算法KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);// 取私钥匙对象PrivateKey priKey = keyFactory.generatePrivate(pkcs8KeySpec);// 用私钥对信息生成数字签名Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);signature.initSign(priKey);signature.update(data);return encryptBASE64(signature.sign());}/*** 校验数字签名** @param data 加密数据* @param publicKey 公钥* @param sign 数字签名* @return 校验成功返回true 失败返回false* @throws Exception*/public static boolean verify(byte[] data, String publicKey, String sign) throws Exception {// 解密由base64编码的公钥byte[] keyBytes = decryptBASE64(publicKey);// 构造X509EncodedKeySpec对象X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);// KEY_ALGORITHM 指定的加密算法KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);// 取公钥匙对象PublicKey pubKey = keyFactory.generatePublic(keySpec);Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);signature.initVerify(pubKey);signature.update(data);// 验证签名是否正常return signature.verify(decryptBASE64(sign));}public static byte[] decryptByPrivateKey(byte[] data, String key) throws Exception {// 对密钥解密byte[] keyBytes = decryptBASE64(key);// 取得私钥PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);Key privateKey = keyFactory.generatePrivate(pkcs8KeySpec);// 对数据解密Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());cipher.init(Cipher.DECRYPT_MODE, privateKey);return cipher.doFinal(data);}/*** 用私钥解密** @param data* @param key* @return* @throws Exception*/public static byte[] decryptByPrivateKey(String data, String key) throws Exception {return decryptByPrivateKey(decryptBASE64(data), key);}/*** 用公钥解密** @param data* @param key* @return* @throws Exception*/public static byte[] decryptByPublicKey(byte[] data, String key) throws Exception {// 对密钥解密byte[] keyBytes = decryptBASE64(key);// 取得公钥X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);Key publicKey = keyFactory.generatePublic(x509KeySpec);// 对数据解密Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());cipher.init(Cipher.DECRYPT_MODE, publicKey);return cipher.doFinal(data);}/*** 用公钥加密** @param data* @param key* @return* @throws Exception*/public static byte[] encryptByPublicKey(String data, String key) throws Exception {// 对公钥解密byte[] keyBytes = decryptBASE64(key);// 取得公钥X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);Key publicKey = keyFactory.generatePublic(x509KeySpec);// 对数据加密Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());cipher.init(Cipher.ENCRYPT_MODE, publicKey);return cipher.doFinal(data.getBytes());}/*** 用私钥加密** @param data* @param key* @return* @throws Exception*/public static byte[] encryptByPrivateKey(byte[] data, String key) throws Exception {// 对密钥解密byte[] keyBytes = decryptBASE64(key);// 取得私钥PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);Key privateKey = keyFactory.generatePrivate(pkcs8KeySpec);// 对数据加密Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());cipher.init(Cipher.ENCRYPT_MODE, privateKey);return cipher.doFinal(data);}/*** 取得私钥** @param keyMap* @return* @throws Exception*/public static String getPrivateKey(Map<String, Key> keyMap) throws Exception {Key key = (Key) keyMap.get(PRIVATE_KEY);return encryptBASE64(key.getEncoded());}/*** 取得公钥** @param keyMap* @return* @throws Exception*/public static String getPublicKey(Map<String, Key> keyMap) throws Exception {Key key = keyMap.get(PUBLIC_KEY);return encryptBASE64(key.getEncoded());}/*** 初始化密钥** @return* @throws Exception*/public static Map<String, Key> initKey() throws Exception {KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM);keyPairGen.initialize(1024);KeyPair keyPair = keyPairGen.generateKeyPair();Map<String, Key> keyMap = new HashMap(2);keyMap.put(PUBLIC_KEY, keyPair.getPublic());// 公钥keyMap.put(PRIVATE_KEY, keyPair.getPrivate());// 私钥return keyMap;}}

加解密测试:

@Test
public void RSATest() throws Exception {Map<String, Key> keyMap = initKey();String publicKey = getPublicKey(keyMap);String privateKey = getPrivateKey(keyMap);System.out.println("公钥:"+publicKey);System.out.println("-----------------------------------");System.out.println("私钥:"+privateKey);System.out.println("-----------------------------------");String src = "满天星辰不及你!";System.out.println("原始数据:"+src);System.out.println("-----------------------------------");byte[] encryptByPrivateKey = encryptByPrivateKey(src.getBytes(), privateKey);byte[] encryptByPublicKey = encryptByPublicKey(src, publicKey);System.out.println("私钥加密后数据"+encryptByPrivateKey);System.out.println("-----------------------------------");System.out.println("公钥加密后数据"+encryptByPublicKey);System.out.println("-----------------------------------");String sign = sign(encryptByPrivateKey, privateKey);System.out.println("数字签名:"+sign);System.out.println("-----------------------------------");boolean verify = verify(encryptByPrivateKey, publicKey, sign);System.out.println("签名验证结果:"+verify);System.out.println("-----------------------------------");byte[] decryptByPublicKey = decryptByPublicKey(encryptByPrivateKey, publicKey);byte[] decryptByPrivateKey = decryptByPrivateKey(encryptByPublicKey, privateKey);System.out.println("公钥解密私钥加密后的数据:"+new String(decryptByPublicKey));System.out.println("-----------------------------------");System.out.println("私钥解密公钥加密后的数据:"+new String(decryptByPrivateKey));
}

五,不可逆算法

5.1 MD5介绍

MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式
(也就是把一个任意长度的字节串变换成一定长的十六进制数字串)。

主要有以下特点:

  • 1.压缩性: 任意长度的数据,算出的MD5值长度都是固定的。
  • 2.容易计算: 从原数据计算出MD5值很容易。
  • 3.抗修改性: 对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
  • 4.强抗碰撞: 已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

Java代码实现:

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;/*** @ClassName: MD5Util* @Description:* @Author: Fufeng* @Date: 2022/7/31 17:14*/
public class MD5Helper {public String encode(String s) throws NoSuchAlgorithmException {MessageDigest md5 = MessageDigest.getInstance("MD5");byte[] md5Bytes = md5.digest(s.getBytes(StandardCharsets.UTF_8));return md5ToString(md5Bytes);}//将md5数组转化为16进制字符串public String md5ToString(byte[] md5Bytes) {StringBuilder hexValue = new StringBuilder();for (int i = 0; i < md5Bytes.length; i++) {int val = md5Bytes[i] & 0Xff;if (val < 16){hexValue.append("0");}hexValue.append(Integer.toHexString(val));}return hexValue.toString();}}

加密测试:

@Test
public void MD5Test() throws NoSuchAlgorithmException {MD5Helper md5Helper = new MD5Helper();String src1 = "满天星辰不及你!";String src2 = "满天星辰不及你!";System.out.println("src1 加密后数据:"+md5Helper.encode(src1));System.out.println("src2 加密后数据:"+md5Helper.encode(src2));
}
5.2 SHA1介绍

对于长度小于2^64位的消息,SHA1会产生一个160位(40个字符)的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。

SHA1有如下特性:

  • 不可以从消息摘要中复原信息;
  • 两个不同的消息不会产生同样的消息摘要,(但会有1x10 ^ 48分之一的机率出现相同的消息摘要,一般使用时忽略)。

Java代码实现:

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;/*** @ClassName: SHA1Util* @Description:* @Author: Fufeng* @Date: 2022/7/31 20:16*/
public class SHA1Helper {public String encode(String str) throws NoSuchAlgorithmException {if (null == str || str.length() == 0){return null;}char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };//创建SHA1算法消息摘要对象MessageDigest mdTemp = MessageDigest.getInstance("SHA1");//使用指定的字节数组更新摘要mdTemp.update(str.getBytes(StandardCharsets.UTF_8));//生成hash值的字节数组byte[] md = mdTemp.digest();//SHA1算法生成信息摘要的关键过程int j = md.length;char[] buf = new char[j*2];int k = 0;for (int i = 0; i < j; i++) {byte byte0 = md[i];buf[k++] = hexDigits[byte0 >>> 4 & 0xf];buf[k++] = hexDigits[byte0 & 0xf];}return new String(buf);}
}

加密测试:

@Test
public void SHA1Test() throws NoSuchAlgorithmException {SHA1Helper sha1Helper = new SHA1Helper();String src1 = "满天星辰不及你!";String src2 = "满天星辰不及你!";System.out.println("src1 加密后数据:"+sha1Helper.encode(src1));System.out.println("src2 加密后数据:"+sha1Helper.encode(src2));
}
5.3 HMAC 介绍

HMAC 是密钥相关的 哈希运算消息认证码(Hash-based Message Authentication Code),HMAC 运算利用 哈希算法 (MD5、SHA1 等),以 一个密钥 和 一个消息 为输入,生成一个 消息摘要 作为 输出。

HMAC 发送方 和 接收方 都有的 key 进行计算,而没有这把 key 的第三方,则是 无法计算 出正确的 散列值的,这样就可以 防止数据被篡改。

Java代码实现:

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;/*** @ClassName: HMACHelper* @Description:* @Author: Fufeng* @Date: 2022/7/31 20:31*/
public class HMACHelper {private Mac mac;/*** MAC算法可选以下多种算法* HmacMD5/HmacSHA1/HmacSHA256/HmacSHA384/HmacSHA512*/private static final String KEY_MAC = "HmacMD5";public HMACHelper(String key) throws Exception {SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), KEY_MAC);mac = Mac.getInstance(secretKey.getAlgorithm());mac.init(secretKey);}public String sign(String content){return new String(mac.doFinal(content.getBytes(StandardCharsets.UTF_8)));}public boolean verify(String signature, String content){byte[] result = mac.doFinal(content.getBytes(StandardCharsets.UTF_8));return Arrays.equals(result,signature.getBytes(StandardCharsets.UTF_8));}
}

加密测试:

@Test
public void HMACTest() throws Exception {HMACHelper hmacHelper = new HMACHelper("123456");String src = "满天星辰不及你!";byte[] signature = hmacHelper.sign(src);boolean b = hmacHelper.verify(signature, src);System.out.println("src 生成数字签名:"+signature);System.out.println("签名验证结果:"+b);
}

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

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

相关文章

SQLite软件架构与实现源代码浅析

概述 SQLite 是一个用 C 语言编写的库&#xff0c;它成功打造出了一款小型、快速、独立、具备高可靠性且功能完备的 SQL 数据库引擎。本文档将为您简要介绍其架构、关键组件及其协同运作模式。 SQLite 显著特点之一是无服务器架构。不同于常规数据库&#xff0c;它并非以单独进…

让 Deepseek GPS测速

下面是一个简单的微信小程序GPS测速功能的实现代码&#xff0c;包括前端页面和后端逻辑。 1. 页面结构 (index.wxml) <view class"container"><view class"speed-display"><text class"speed-value">{{speed}}</text>…

什么是软件的生命周期,以及常见的开发测试模型

目录 一、软件的生命周期 1、什么是生命周期&#xff1f; 2、每个阶段都要做些什么&#xff1f; 二、常见的开发模型 1、瀑布模型 2、螺旋模型 3、增量模型、迭代模型 4、敏捷模型 scrum模型 三个角色 五个会议 一、软件的生命周期 1、什么是生命周期&#xff…

JWT安全:弱签名测试.【实现越权绕过.】

JWT安全&#xff1a;假密钥【签名随便写实现越权绕过.】 JSON Web 令牌 (JWT)是一种在系统之间发送加密签名 JSON 数据的标准化格式。理论上&#xff0c;它们可以包含任何类型的数据&#xff0c;但最常用于在身份验证、会话处理和访问控制机制中发送有关用户的信息(“声明”)。…

数据分析与应用-----使用scikit-learn构建模型

目录 一、使用sklearn转换器处理数据 &#xff08;一&#xff09;、加载datasets模块中的数据集 &#xff08;二&#xff09;、将数据集划分为训练集和测试集 ​编辑 train_test_spli &#xff08;三&#xff09;、使用sklearn转换器进行数据预处理与降维 PCA 二、 构…

【Tomcat】Tomcat端口仅允许本地访问设置方法

要设置Tomcat端口仅允许本地访问&#xff0c;可以通过以下两种主要方式实现&#xff1a; 方法一&#xff1a;修改Tomcat配置文件&#xff08;推荐&#xff09; 修改 server.xml 文件 打开Tomcat的配置文件 conf/server.xml&#xff0c;找到 <Connector> 标签&#xff08;…

arcgis字段计算器中计算矢量面的每个点坐标

python脚本 函数 def ExportCoordinates(feat):coors = []partnum = 0partcount = feat.partCountwhile partnum < partcount:part = feat.getPart(partnum)pnt = part.next()while pnt:coors.append("({}, {})".format(pnt.X,pnt.Y))pnt = part.next()if not p…

企业级AI开启落地战,得场景者得天下

文&#xff5c;白 鸽 编&#xff5c;王一粟 这两周&#xff0c;企业级智能体开发平台颇有你方唱罢我方登台的架势。 微软、腾讯、网易等国内外巨头&#xff0c;近期都相继宣布推出了新一代智能体开发平台。相比于两年前&#xff0c;智能体开发的产品逻辑已经有了翻天覆地的变…

探索C++标准模板库(STL):String接口实践+底层的模拟实现(中篇)

前引&#xff1a;上一篇文章小编已经整理出了String的常用接口&#xff0c;梳理了各个接口的功能、参数&#xff0c;如何使用等各种实例。本篇文章将带大家看看String这些接口的实践使用&#xff0c;探索这些接口的实用性&#xff0c;是如何增加代码效率的。在本篇文章的末尾&a…

【模型显著性分析】配对样本 t 检验

写在前面&#xff1a;本博客仅作记录学习之用&#xff0c;部分图片来自网络&#xff0c;如需引用请注明出处&#xff0c;同时如有侵犯您的权益&#xff0c;请联系删除&#xff01; 文章目录 前言 t t t 检验配对样本 t t t 检验&#xff08;适用于相关组&#xff09;代码论文描…

商旅平台排名:十大商旅服务平台解析

商旅平台排名&#xff1a;十大商旅服务平台解析 在企业降本增效的关键转型期&#xff0c;商旅管理正成为优化运营成本与提升管理效能的核心场景。如何在保障出行体验的同时实现差旅成本精细化管控、管理流程智能化&#xff0c;成为越来越多企业的战略焦点。随着AI技术在数据洞…

题海拾贝:P1208 [USACO1.3] 混合牛奶 Mixing Milk

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》、《C修炼之路》 欢迎点赞&#xff0c;关注&am…

每天掌握一个Linux命令 - ab(Apache Benchmark)

Linux 命令工具 ab 使用指南 一、工具概述 ab&#xff08;Apache Benchmark&#xff09; 是 Apache 官方提供的开源压力测试工具&#xff0c;用于衡量 Web 服务器的性能。它通过模拟多并发请求&#xff0c;测试服务器在高负载下的响应速度、吞吐量和稳定性&#xff0c;常用于…

AI的“空间盲症“

<------最重要的是订阅“鲁班模锤”------> 当我们看到一张照片时&#xff0c;大脑会自动分析其中的空间关系——哪个物体在前&#xff0c;哪个在后&#xff0c;左边是什么&#xff0c;右边是什么。但对于当今最先进的AI系统来说&#xff0c;这种看似简单的空间理解却是…

数据拟合实验

实验类型&#xff1a;●验证性实验 ○综合性实验 ○设计性实验 实验目的: 进一步熟练掌握最小二乘多项式拟合算法&#xff0c;提高编程能力和解决拟合问题的实践技能。 实验内容&#xff1a; 1 对下列数据&#xff0c;求解最小二乘抛物线f(x)Ax2BxC x -3 -1 1 3 y 15 5 …

系统思考:心智模式与业务创新

在最近的项目交付讨论中&#xff0c;我频繁听到一个词&#xff1a;“缺合适的人”。这让我陷入了深思&#xff1a;我们是否还在传统的生产力概念&#xff1f;纳瓦尔提出的三种杠杆&#xff1a;劳动力、资本、零边际成本产品。在当今这个信息化、全球化的商业世界中&#xff0c;…

python分步合并处理excel数据

文章目录 概要整体架构流程技术名词解释技术细节小结概要 客户需求 1. 背景与目标 用户需要将三个包含农业实验数据的Excel表格(AK、AN、AP)合并为一个结构化数据集,用于后续分析。每个表格包含相同类型的字段(如对照组与PSB处理组的样本数、均值、标准差),但需通过字…

Python爬虫实战:研究PyQuery库相关技术

1. 引言 1.1 研究背景与意义 随着互联网的快速发展,网络上的数据量呈爆炸式增长。如何高效地从海量的网页数据中提取有价值的信息,成为当前信息技术领域的一个重要研究方向。网络爬虫作为一种自动获取网页内容的程序,能够按照一定的规则,自动地抓取万维网信息,在搜索引擎…

深度学习---注意力机制(Attention Mechanism)

一、核心概念与发展背景 注意力机制是深度学习中模拟人类注意力选择能力的关键技术&#xff0c;旨在从海量信息中筛选关键特征&#xff0c;解决长序列信息处理中的瓶颈问题&#xff08;如RNN的梯度消失&#xff09;。其核心思想是&#xff1a;对输入序列的不同部分分配不同权重…

Jenkins分配对应项目权限与用户管理

在日常开发过程中经常会出现用户和权限管理问题&#xff0c;没有配置trigger时&#xff0c;通常需要我们手动构建&#xff0c;但此时前端和后端的朋友没有build权限&#xff0c;导致每次dev环境测试都需要麻烦我们手动去构建&#xff0c;消息传达不及时则会降低开发效率。 现有…