关于RSA公私钥加密报错Data must not be longer than 117 bytes问题解决办法
一、问题描述
1.背景
大家都知道,在日常项目开发过程中,数据的传输安全一直都是值得重视的问题,当然了市面上解决此类办法的技术也有很多,本项目在提供给第三方使用是数据以及校验第三方传递的参数,采用常用的RSA公私钥加解密的方式进行数据安全传输。
1.2RSA工具类
普通版
此工具类包含公私钥生成,及加解密方法
package com.juhe.gjj.util;import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import org.apache.tomcat.util.codec.binary.Base64;import javax.crypto.Cipher;
import java.security.*;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.HashMap;
import java.util.Map;import static cn.hutool.crypto.SmUtil.sm3;/*** @author kiki* @date 2024/2/26* @description*/
public class RsaUtil {//用于封装随机产生的公钥与私钥private static Map<Integer, String> keyMap = new HashMap<Integer, String>();/*** 随机生成密钥对* @throws NoSuchAlgorithmException*/public static void genKeyPair() throws NoSuchAlgorithmException {// KeyPairGenerator类用于生成公钥和私钥对,基于RSA算法生成对象KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");// 初始化密钥对生成器,密钥大小为96-1024位keyPairGen.initialize(1024,new SecureRandom());// 生成一个密钥对,保存在keyPair中KeyPair keyPair = keyPairGen.generateKeyPair();// 得到私钥RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();//得到公钥RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();String publicKeyString = new String(Base64.encodeBase64(publicKey.getEncoded()));// 得到私钥字符串String privateKeyString = new String(Base64.encodeBase64((privateKey.getEncoded())));// 将公钥和私钥保存到Map(0表示公钥,1表示私钥)keyMap.put(0,publicKeyString);keyMap.put(1,privateKeyString);}/*** RSA公钥加密** @param str* 加密字符串* @param publicKey* 公钥* @return 密文* @throws Exception* 加密过程中的异常信息*/public static String encrypt(String str, String publicKey) throws Exception{//base64编码的公钥byte[] decoded = Base64.decodeBase64(publicKey);RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded));//RSA加密Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.ENCRYPT_MODE, pubKey);String outStr = Base64.encodeBase64String(cipher.doFinal(str.getBytes("UTF-8")));return outStr;}/*** RSA私钥解密** @param str* 加密字符串* @param privateKey* 私钥* @return 铭文* @throws Exception* 解密过程中的异常信息*/public static String decrypt(String str, String privateKey) throws Exception{//64位解码加密后的字符串byte[] inputByte = Base64.decodeBase64(str.getBytes("UTF-8"));//base64编码的私钥byte[] decoded = Base64.decodeBase64(privateKey);RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded));//RSA解密Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.DECRYPT_MODE, priKey);String outStr = new String(cipher.doFinal(inputByte));return outStr;}public static String getEncryptedStr(Long timestamp, String systemCode, String secretKey){String syncSign = "";syncSign = sm3(systemCode + timestamp + secretKey);Map map = new HashMap();map.put("timestamp", timestamp);map.put("syncSign", syncSign);String content = JSONUtil.toJsonStr(map);return BizSmUtil.sm4DoEncrypt(secretKey, content);}public static void main(String[] args) throws Exception{//生成公钥和私钥genKeyPair();//加密字符串//String message = "df723820";String publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCT/NMk9W1pi5O6vHWbZ1nH8idxynONUEpUYf8N0rJ3MP5I7mAHN6LM+cCd/z3JR2ofE0naq3pv5hfJnYHmK/ujhflmRPwDY4thNOKE8IHVJazAunW9HXczA5abK8RSGcGvKCl7C35zFOfBod1ksYFLIzKBEXBhtkiH/qGnEaYnhwIDAQAB";String privateKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJP80yT1bWmLk7q8dZtnWcfyJ3HKc41QSlRh/w3Ssncw/kjuYAc3osz5wJ3/PclHah8TSdqrem/mF8mdgeYr+6OF+WZE/ANji2E04oTwgdUlrMC6db0ddzMDlpsrxFIZwa8oKXsLfnMU58Gh3WSxgUsjMoERcGG2SIf+oacRpieHAgMBAAECgYA4lvSS7HsTYjlyrgB3FbViXToyLE21mx9hVzv2KDzwkT6b2vPDrsXFhjfe8yzIXFO7YF/ci7g9NAqioWV8BBOsZNA8FelZkdOcNkLzS0jXlWvh74U0/bkrg+3TR+lvYbqw4eC7pBzn+mXJeN5RUbtDIvTq8BnceUNxgr3t6C4mCQJBAOJJn406uFfjc4M3pRf0hIw2+cAxI+GzkxZxEVk/fuIIz/4fPkWdqlqwbLbd5BkmlJKPI3WB0/wa2FlcJOQAh4UCQQCnaz6Mof0+5zXioG3NaotISUwTb7tKjc8riW3wGCoQhrMCRDPgkIC9GWSFGDiMNoCGZu8xtRPmp971vctrVdKbAkEA4FqgbzTl6nWfZFy6Obr748zp5+yQp8kULy7hRXxXv6F/HnQ5mGoOqaW7077B1VHUAk8al/mlhJHVKRvbk5cWxQJAIBpxgRgi7qf5bj6jL4upr6/WdbesK2yr+EY/HZYUotyhgOLBK+OpvBkdbGQrm79rv9oHLfnyGf3AxFCjrC5l1wJAUhqQnmKyIo2tTONEtRW2nFd7nHCZ3nm4G8Mh+dP0m14m5By9coWKU9uFhLuq+L+VpEFLjIx1Dg8qiYRLdQQH+Q==";HashMap<String, Object> mp = new HashMap<>();mp.put("createtime1","12344444445");mp.put("createtime2","12344444445");mp.put("createtime3","12344444445");mp.put("createtime4","12344444445");mp.put("createtime5","12344444445");mp.put("createtime6","12344444445");mp.put("createtime7","12344444445");mp.put("createtime8","12344444445");mp.put("createtime9","12344444445");mp.put("createtime19","12344444445");mp.put("createtime12","12344444445");mp.put("createtime23","12344444445");mp.put("createtime81","12344444445");mp.put("createtime91","12344444445");String message = JSON.toJSONString(mp);System.out.println("随机生成的公钥为:" + publicKey);System.out.println("随机生成的私钥为:" + privateKey);String messageEn = encrypt(message,publicKey);System.out.println(message + "\t加密后的字符串为:" + messageEn);String messageDe = decrypt(messageEn,privateKey);System.out.println("还原后的字符串为:" + messageDe);
// TokenVO tokenVO = JSON.parseObject(messageDe, TokenVO.class);
// System.out.println(tokenVO);}
}
但是上述处理公私钥的方式,如果加密字符串data过长,则会导致Data must not be longer than 117 bytes的异常
1.3RSAUtil升级
原理是采用分段加解密,如此解决,当然了如果要加密的原始数据过长,这样的效率也是很低的
package com.juhe.gjj.util;import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.apache.tomcat.util.codec.binary.Base64;import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import java.io.UnsupportedEncodingException;
import java.security.KeyFactory;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;/*** @author kiki* @date 2024/2/29* @description*/
@Slf4j
public class RsaExpandUtil {public static final String publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCT/NMk9W1pi5O6vHWbZ1nH8idxynONUEpUYf8N0rJ3MP5I7mAHN6LM+cCd/z3JR2ofE0naq3pv5hfJnYHmK/ujhflmRPwDY4thNOKE8IHVJazAunW9HXczA5abK8RSGcGvKCl7C35zFOfBod1ksYFLIzKBEXBhtkiH/qGnEaYnhwIDAQAB";public static final String privateKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJP80yT1bWmLk7q8dZtnWcfyJ3HKc41QSlRh/w3Ssncw/kjuYAc3osz5wJ3/PclHah8TSdqrem/mF8mdgeYr+6OF+WZE/ANji2E04oTwgdUlrMC6db0ddzMDlpsrxFIZwa8oKXsLfnMU58Gh3WSxgUsjMoERcGG2SIf+oacRpieHAgMBAAECgYA4lvSS7HsTYjlyrgB3FbViXToyLE21mx9hVzv2KDzwkT6b2vPDrsXFhjfe8yzIXFO7YF/ci7g9NAqioWV8BBOsZNA8FelZkdOcNkLzS0jXlWvh74U0/bkrg+3TR+lvYbqw4eC7pBzn+mXJeN5RUbtDIvTq8BnceUNxgr3t6C4mCQJBAOJJn406uFfjc4M3pRf0hIw2+cAxI+GzkxZxEVk/fuIIz/4fPkWdqlqwbLbd5BkmlJKPI3WB0/wa2FlcJOQAh4UCQQCnaz6Mof0+5zXioG3NaotISUwTb7tKjc8riW3wGCoQhrMCRDPgkIC9GWSFGDiMNoCGZu8xtRPmp971vctrVdKbAkEA4FqgbzTl6nWfZFy6Obr748zp5+yQp8kULy7hRXxXv6F/HnQ5mGoOqaW7077B1VHUAk8al/mlhJHVKRvbk5cWxQJAIBpxgRgi7qf5bj6jL4upr6/WdbesK2yr+EY/HZYUotyhgOLBK+OpvBkdbGQrm79rv9oHLfnyGf3AxFCjrC5l1wJAUhqQnmKyIo2tTONEtRW2nFd7nHCZ3nm4G8Mh+dP0m14m5By9coWKU9uFhLuq+L+VpEFLjIx1Dg8qiYRLdQQH+Q==";/*** RSA公钥加密** @param str 加密字符串* @param publicKey 公钥* @return 密文* @throws Exception 加密过程中的异常信息*/public static String encrypt(String str, String publicKey) throws Exception {log.info("|RSA公钥加密前的数据|str:{}|publicKey:{}", str, publicKey);//base64编码的公钥byte[] decoded = Base64.decodeBase64(publicKey);RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded));//RSA加密Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.ENCRYPT_MODE, pubKey);//当长度过长的时候,需要分割后加密 117个字节byte[] resultBytes = getMaxResultEncrypt(str, cipher);String outStr = Base64.encodeBase64String(resultBytes);log.info("|公钥加密后的数据|outStr:{}", outStr);return outStr;}private static byte[] getMaxResultEncrypt(String str, Cipher cipher) throws IllegalBlockSizeException, BadPaddingException {byte[] inputArray = str.getBytes();int inputLength = inputArray.length;log.info("|加密字节数|inputLength:{}", inputLength);// 最大加密字节数,超出最大字节数需要分组加密int MAX_ENCRYPT_BLOCK = 117;// 标识int offSet = 0;byte[] resultBytes = {};byte[] cache = {};while (inputLength - offSet > 0) {if (inputLength - offSet > MAX_ENCRYPT_BLOCK) {cache = cipher.doFinal(inputArray, offSet, MAX_ENCRYPT_BLOCK);offSet += MAX_ENCRYPT_BLOCK;} else {cache = cipher.doFinal(inputArray, offSet, inputLength - offSet);offSet = inputLength;}resultBytes = Arrays.copyOf(resultBytes, resultBytes.length + cache.length);System.arraycopy(cache, 0, resultBytes, resultBytes.length - cache.length, cache.length);}return resultBytes;}/*** RSA私钥解密** @param str 加密字符串* @param privateKey 私钥* @return 铭文* @throws Exception 解密过程中的异常信息*/public static String decrypt(String str, String privateKey) throws Exception {log.info("|RSA私钥解密前的数据|str:{}|privateKey:{}", str, privateKey);//64位解码加密后的字符串byte[] inputByte = Base64.decodeBase64(str.getBytes("UTF-8"));//base64编码的私钥byte[] decoded = Base64.decodeBase64(privateKey);RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded));//RSA解密Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.DECRYPT_MODE, priKey);
// String outStr = new String(cipher.doFinal(inputByte));//当长度过长的时候,需要分割后解密 128个字节String outStr = new String(getMaxResultDecrypt(str, cipher));log.info("|RSA私钥解密后的数据|outStr:{}", outStr);return outStr;}private static byte[] getMaxResultDecrypt(String str, Cipher cipher) throws IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {byte[] inputArray = Base64.decodeBase64(str.getBytes("UTF-8"));int inputLength = inputArray.length;log.info("|解密字节数|inputLength:{}", inputLength);// 最大解密字节数,超出最大字节数需要分组加密int MAX_ENCRYPT_BLOCK = 128;// 标识int offSet = 0;byte[] resultBytes = {};byte[] cache = {};while (inputLength - offSet > 0) {if (inputLength - offSet > MAX_ENCRYPT_BLOCK) {cache = cipher.doFinal(inputArray, offSet, MAX_ENCRYPT_BLOCK);offSet += MAX_ENCRYPT_BLOCK;} else {cache = cipher.doFinal(inputArray, offSet, inputLength - offSet);offSet = inputLength;}resultBytes = Arrays.copyOf(resultBytes, resultBytes.length + cache.length);System.arraycopy(cache, 0, resultBytes, resultBytes.length - cache.length, cache.length);}return resultBytes;}public static void main(String[] args) throws Exception{//加密字符串//String message = "df723820";String publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCT/NMk9W1pi5O6vHWbZ1nH8idxynONUEpUYf8N0rJ3MP5I7mAHN6LM+cCd/z3JR2ofE0naq3pv5hfJnYHmK/ujhflmRPwDY4thNOKE8IHVJazAunW9HXczA5abK8RSGcGvKCl7C35zFOfBod1ksYFLIzKBEXBhtkiH/qGnEaYnhwIDAQAB";String privateKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJP80yT1bWmLk7q8dZtnWcfyJ3HKc41QSlRh/w3Ssncw/kjuYAc3osz5wJ3/PclHah8TSdqrem/mF8mdgeYr+6OF+WZE/ANji2E04oTwgdUlrMC6db0ddzMDlpsrxFIZwa8oKXsLfnMU58Gh3WSxgUsjMoERcGG2SIf+oacRpieHAgMBAAECgYA4lvSS7HsTYjlyrgB3FbViXToyLE21mx9hVzv2KDzwkT6b2vPDrsXFhjfe8yzIXFO7YF/ci7g9NAqioWV8BBOsZNA8FelZkdOcNkLzS0jXlWvh74U0/bkrg+3TR+lvYbqw4eC7pBzn+mXJeN5RUbtDIvTq8BnceUNxgr3t6C4mCQJBAOJJn406uFfjc4M3pRf0hIw2+cAxI+GzkxZxEVk/fuIIz/4fPkWdqlqwbLbd5BkmlJKPI3WB0/wa2FlcJOQAh4UCQQCnaz6Mof0+5zXioG3NaotISUwTb7tKjc8riW3wGCoQhrMCRDPgkIC9GWSFGDiMNoCGZu8xtRPmp971vctrVdKbAkEA4FqgbzTl6nWfZFy6Obr748zp5+yQp8kULy7hRXxXv6F/HnQ5mGoOqaW7077B1VHUAk8al/mlhJHVKRvbk5cWxQJAIBpxgRgi7qf5bj6jL4upr6/WdbesK2yr+EY/HZYUotyhgOLBK+OpvBkdbGQrm79rv9oHLfnyGf3AxFCjrC5l1wJAUhqQnmKyIo2tTONEtRW2nFd7nHCZ3nm4G8Mh+dP0m14m5By9coWKU9uFhLuq+L+VpEFLjIx1Dg8qiYRLdQQH+Q==";HashMap<String, Object> mp = new HashMap<>();mp.put("createtime1","12344444445");mp.put("createtime2","12344444445");mp.put("createtime3","12344444445");mp.put("createtime4","12344444445");mp.put("createtime5","12344444445");mp.put("createtime6","12344444445");mp.put("createtime7","12344444445");mp.put("createtime8","12344444445");mp.put("createtime9","12344444445");mp.put("createtime19","12344444445");mp.put("createtime12","12344444445");mp.put("createtime23","12344444445");mp.put("createtime81","12344444445");mp.put("createtime91","12344444445");String message = JSON.toJSONString(mp);String messageEn = encrypt(message,publicKey);System.out.println(message + "\n加密后的字符串为:" + messageEn);String messageDe = decrypt(messageEn ,privateKey);System.out.println("还原后的字符串为:" + messageDe);}
}相关文章:
关于RSA公私钥加密报错Data must not be longer than 117 bytes问题解决办法
一、问题描述 1.背景 大家都知道,在日常项目开发过程中,数据的传输安全一直都是值得重视的问题,当然了市面上解决此类办法的技术也有很多,本项目在提供给第三方使用是数据以及校验第三方传递的参数,采用常用的RSA公私…...
【云原生】kubeadm快速搭建K8s集群Kubernetes1.19.0
目录 一、 Kubernetes 的概述 二、服务器配置 2.1 服务器部署规划 2.2服务器初始化配置 三、安装Docker/kubeadm/kubelet【所有节点】 3.1 安装Docker 3.2 添加阿里云YUM软件源 3.3 安装kubeadm,kubelet和kubectl 四、部署Kubernetes Master 五、部署Kube…...
Android 开发环境搭建的步骤
本文将为您详细讲解 Android 开发环境搭建的步骤。搭建 Android 开发环境需要准备一些软件和工具,以下是一些基础步骤: 1. 安装 Java Development Kit (JDK) 首先,您需要安装 Java Development Kit (JDK)。JDK 是 Android 开发的基础…...
六、继承(一)
1 继承的引入 以往我们想分别实现描述学生、老师的类,可能会这样子做: class Student {string _name;string _number;int _tel;int id;string _address;int _age; }; class Teacher {string _name;int _level;int _tel;int id;string _address;int _ag…...
数字化转型导师鹏:政府数字化转型政务服务类案例研究
政府数字化转型政务服务类案例研究 课程背景: 很多地方政府存在以下问题: 不清楚标杆省政府数字化转型的政务服务类成功案例 不清楚地级市政府数字化转型的政务服务类成功案例 不清楚县区级政府数字化转型的政务服务类成功案例 课程特色&#x…...
解决ODOO12 恢复数据库提示内存不够报错
1. 现象 点击 ‘restore database’ 控制台报错: 2. 解决措施 a. 进入启动脚本的文件夹 cd odoo/odoo-12.0/输入命令 ./odoo-bin --addons-pathaddons --databaseodoo --db_userodoo --db_passwordodoo --db_hostlocalhost --db_port5432 -i INITb. 刷新页面…...
关于数据提交上传服务端的数据类型以及项目打包上线的流程
1 请求头的类型: content-type; 01: application/json 数据以json格式请求:{"key":"value"} 02: application/x-www.form-urlencoded from表单的数据格式 name"zs"&age12 03 mutipart/form-data…...
儿童悬吊训练系统:改善脑性麻痹儿童平衡感与运动能力的有效途径
脑性麻痹(CP)是一种运动障碍,常常由于早期的运动皮层损伤而引起。这种损伤可能导致姿势、操纵技能和行走能力的差异。平衡控制不良是 CP 患儿面临的一项主要挑战,它可能导致动作控制异常以及步态问题,从而影响日常活动…...
ElasticSearch之文档的存储
写在前面 本文看下文档的存储相关内容。 1:如何确定文档存储在哪个分片? 我们需要确保文档均匀分布在所有的分片中,避免某些部分机器空闲,部分机器繁忙的情况出现,想要实现均匀分布我们可以考虑如下的几种分片路由算…...
在Redhat 7 Linux上安装llama.cpp [ 错误stdatomic.h: No such file or directory]
前期准备 在github上下载llama.cpp或克隆。 GitHub - ggerganov/llama.cpp: LLM inference in C/C git clone https://github.com/ggerganov/llama.cpp.gitcd llama.cpp 执行make命令编译llama.cpp make 在huggingface里下载量化了的 gguf格式的llama2模型。 https:/…...
linux 常用 命令行HTTP客户端
在Linux环境中,命令行HTTP客户端是一种用于发送HTTP请求的工具,它们通常用于测试网站、服务器或API的响应。这些客户端支持各种HTTP方法,如GET、POST、PUT、DELETE等,并允许用户设置请求头、发送数据等。以下是一些常用的命令行HT…...
深入理解@Param注解:用于参数映射的利器
摘要:Param注解在Java开发中被广泛应用,它可以优雅地解决方法参数与SQL语句中占位符的映射问题,提高代码的可读性和可维护性。本文将深入探讨Param注解的背景、使用方法、解决的问题、映射原理,并对使用与不使用Param注解的情况进…...
OCP Secure boot必要特性
三点必需要求: The platform components must: 1. Provide a mechanism for securely anchoring a root of trust public key. // 提供一种用于安全地锚定信任根公钥的机制。 2. Verify the device firmware digital signature using the anchored public key /…...
全新攻击面管理平台
首页大屏 内测阶段,免费试用一个月 有兴趣体验的师傅,来长亭云图极速版群里找我 py...
在VMware中安装CentOS 7并配置Docker
VMware安装CentOS 7 一、介绍 该文章介绍如何使用启动U盘在虚拟机里面安装系统,虚拟机版本为VMware Workstation 16 pro,Linux版本为CentOS Linux release 7.9.2009 (Core)。 二、安装 1、创建虚拟机 点击创建新的虚拟机 选择典型就可以了…...
Leetcoder Day37| 动态规划part04 背包问题
01背包理论基础 面试掌握01背包,完全背包和重背包就够用了。 背包问题的理论基础重中之重是01背包,一定要理解透! 01 背包 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品…...
突破编程_C++_面试(STL 编程 vector )
面试题 1 :std::vector 的底层存储机制是什么? std::vector 的底层存储机制是一个动态数组,它内部通过一片连续的内存空间来存储元素。当这个连续的内存空间不足以容纳新元素时,std::vector 会自动申请一块更大的内存空间&#x…...
【报名指南】2024年第九届数维杯数学建模挑战赛报名全流程图解
1.官方报名链接: 2024年第九届数维杯大学生数学建模挑战赛http://www.nmmcm.org.cn/match_detail/32 2.报名流程(电脑与手机报名操作流程一致) 参赛对象为在校专科生、本科生、研究生,每组参赛人数为1-3人(指导老师不…...
C#,哈夫曼编码(Huffman Code)压缩(Compress )与解压缩(Decompress)算法与源代码
David A. Huffman 1 哈夫曼编码简史(Huffman code) 1951年,哈夫曼和他在MIT信息论的同学需要选择是完成学期报告还是期末考试。导师Robert M. Fano给他们的学期报告的题目是,寻找最有效的二进制编码。由于无法证明哪个已有编码是…...
JS 对象数组排序方法测试
输出 一.Array.prototype.sort() 1.默认排序 sort() sort() 方法就地对数组的元素进行排序,并返回对相同数组的引用。默认排序是将元素转换为字符串,然后按照它们的 UTF-16 码元值升序排序。 由于它取决于具体实现,因此无法保证排序的时…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
