当前位置: 首页 > news >正文

php加密解密的用法(对称加密,非对称加密)

加密和摘要的区别
***摘要:是从已知的数据中,通过摘要计算出一个值,一个数据对应一个或多个摘要的值 ***
比如:md5 和 sha1 sha256 hash 就是得到一个特定的值 ,同一个数据得到的md5 是一样的,不会改变的
比如:password_hash 产生的是一个可以变化的摘要,同一个数据每一次生成的都是不一样的结果,当验证的时候可以使用password_verify 来验证是否正确
以下是上面的使用代码

 		$str = "hello huangjunhui";var_dump(md5($str));echo "<br/>";var_dump(hash("md5",$str));echo "<br/>";var_dump(sha1($str));echo "<br/>";var_dump(hash("sha1",$str));echo "<br/>";var_dump(hash("sha256",$str));echo "<br/>";var_dump(hash("sha512",$str));echo "<br/>";

在这里插入图片描述
这里说一下 hash 的用法, hash($algo,$data);
algo是散列的算法, 如果想要查看 hash 可以支持哪些算法, 可以使用 hash_algos() 函数, 得到的数组就是 hash 支持的算法


以上的摘要都是唯一值的, 同样还有一种算法不是唯一值的,比如我们使用的 password_hash 函数

   $str = "hello huangjunhui";$result = password_hash($str,PASSWORD_DEFAULT);//得到加密的结果echo $result."<br/>";  //$2y$10$4sFjS28dGe/DM5MQMQKPp.R.wWWqZYgHJQCHqGjo8vfPPKYrrBzl2//$2y$10$uPBE9MKkJh1r4NSk5VgzduUhrgeMLgnJXzmbghEdh8cK3swnvAXEmecho (int)password_verify($str,$result); //这里是一个布尔值,强转了int

在这里插入图片描述
上面可以看到, 每一次 password_hash的结果都是不一样的, 当验证的时候, 却总是结果为 真,所以这种方法,一般都用在存储用户的密码到数据库,就算数据库丢失,也不会让用户的密码泄漏
上面的几个摘要方法有一个共同点就是 不可逆,也就是说,你想通过密文再获取到原文是不可能的, 所以以上的算法都属于摘要算法


加密解密

能加密解密,就是说,我不仅可以从原文得到密文,也可以从密文在反过来得到原文
主要有两种方式, 一种是对称加密, 一种是非对称加密

php 的加解密用的 openssl_encrypt 和 openssl_decrype
顺便说一句, php之前有一个加密的方法 mcrypt 方法过时了

openssl 的使用注意事项

我在 windows 系统中使用的 openssl , 首先要在 php.ini中打开 openssl的扩展,同时还要找到openssl 的 配置文件(openssl.cnf)的路径,在会使用的时候要指明 openssl.cnf 的路径, 不然会报错
在这里插入图片描述
可以看到,phpinfo中的 openssl 的配置件在 /usr/local/ssl/openssl.cnf 路径中,window 中根本没有这个路径,所以我们在使用 php 的 openssl的时候要在配置中指明配置文件的路径

对称加密,就是加解密过程中,所使用的密钥是一样的

openssl_encrypt 中的 第三个参数 默认就是 pkcs#7
在这里插入图片描述

对称加密的算法, 通常有 AES 和 DES 两中,下面我们来看看 PHP 中的对称加密
对称加密通常用于内部的系统, 比如本地的文件加密, 加密时会产生一上 iv向量, 在进行网络传输时, 是要和密文一起传给接收方的, 双方密主要保证 密钥的安全, 不泄漏就可以了
以下是 生成一个密文, 再解密这个密文的代码

//生成一个密文,并返回 密文和iv向量    
public function openssl(){$str = "hello world,huang junhui";   //待加密的字符串$key = openssl_random_pseudo_bytes(16);  //这里相当于就是一个密钥了, 加密和解密时的密码必须是一样的才可以dump(strlen($key)); //int(16)$keybase64 = base64_encode($key);    //因为上一步生成的 key是一个 二进制的数据, 显示出来是乱码, 所在要想显示,就要base64一下$key1 = base64_decode($keybase64);dump($keybase64);dump(strlen($keybase64)); //int(24)$cipher = "AES-128-CBC";  //这里是加密算法的名称  可以使用  openssl_get_cipher_methods() 查看所有支持的加密算法名称$ivLen = openssl_cipher_iv_length($cipher);     //获取算法对应初始化向量的长度$iv = openssl_random_pseudo_bytes($ivLen);  //随机生成一个初始化向量  //这里也可以手写一个长度为 $ivLen 的字符串,此例中$ivLen是16, 所以可以随便写一个 ”sfasfasdfsdfasdf“$encrypted = openssl_encrypt($str,$cipher,$key,OPENSSL_RAW_DATA,$iv);//$encrypted = openssl_encrypt($str,$cipher,$keybase64,OPENSSL_RAW_DATA,"sfasfasdfsdfasdf");  //字符长度必需是16位的 $ivLen的长度//这里使用 $key 和 $keybase64 不影响效果(长度不一样 一个是16一个是24), 也就是说 密钥的长度是可以任意长度的, 只要加密和解密的时侯使用同一个 key就可以了//由于对称加密的特殊性, 当传输数据的时候,是要把iv明文一起传输线接收方的,所以当我们返回给请求方的时候要把 密文加上 $iv 一起传送给前端,又因为$iv是一个二进制数据,所以要base64一下,才可以在网络中传输// dump(base64_encode($encrypted.":".$iv));//接收端接到数据之后,首先base64_decode ,然后使用 ":" 把密文和向量数据分开return base64_encode($encrypted.":::".$iv);//$decrypted = openssl_decrypt($encrypted,$cipher,$key,OPENSSL_RAW_DATA,$iv);//$decrypted = openssl_decrypt($encrypted,$cipher,$keybase64,OPENSSL_RAW_DATA,"sfasfasdfsdfasdf");//dump($decrypted);}//解密密文public function decodeopenssl(){//传入的加密结果 "PDwc77SaX/WcpipdClDx3dYCQBjwWarDswmcwkYKUYU6OjqwKjMwKxcMKU34FYTRhqoj"//加密时使用的 key "XHvcRREJw5vlJKP8AoR39A=="//$base64str = input("secret_content");$str = base64_decode("PDwc77SaX/WcpipdClDx3dYCQBjwWarDswmcwkYKUYU6OjqwKjMwKxcMKU34FYTRhqoj");dump($str);$secretArr = explode(":::",$str);$secretbody = $secretArr[0];$iv = $secretArr[1];$key = base64_decode("XHvcRREJw5vlJKP8AoR39A==");$cipher = "AES-128-CBC";$decrypted = openssl_decrypt($secretbody,$cipher,$key,OPENSSL_RAW_DATA,$iv);dump($decrypted);}

对称加密,是双方都知道密钥的情况下,使用的,最主要的是密钥的安全,iv 明文传输没关系

非对称加密

非对称加密可以用作对数据的加密, 也可以用作对数据的签名;
加密和签名的理解, 加密的时候是 返回给接收方一段无序的数据, 要对方解密才可以使用,签名是, 把原数据给接收方,并在返回的数据中 带上一个由原数据生成的一个签名数据

    public function openssl(){$str = "hello world,huang junhui";   //待加密的字符串//上面说过,在windows中,openssl 的配置文件的路径是要自己找定的  系统默认的路径不是正确的,所以我们要进 配置文的的路径的配置//两种方式, 一种是在系统环境变量中配置  环境变量名:OPENSSL_CONF     变量值 :就是openssl.cnf文件的位置  D:\laragon\bin\apache\httpd-2.4.54-win64-VS16\conf\openssl.cnf//另一种方式,在config数组中配置 "config" =>"D:\laragon\bin\apache\httpd-2.4.54-win64-VS16\conf\openssl.cnf" , 注意config 的结构$config = ["config"=>"D:\laragon\bin\apache\httpd-2.4.54-win64-VS16\conf\openssl.cnf","digest_alg" => "sha512",           //摘要算法或签名的算法  非必填"private_key_bits" => 2048,         //私钥的长度  512  1024  2048  4096 通常选1024或2048"private_key_type" => OPENSSL_KEYTYPE_RSA,      //加密类型  通常可以选择OPENSSL_KEYTYPE_DSA、 OPENSSL_KEYTYPE_DH、 OPENSSL_KEYTYPE_RSA 或 OPENSSL_KEYTYPE_EC。 默认值是 OPENSSL_KEYTYPE_RSA。];//创建私钥和公钥资源$res = openssl_pkey_new($config);     //注意这里是一个包含了公私钥的资源//资源中获取私钥      公私钥资源      生成的私钥       第三个参数是可以加一些盐值   第四个参数是 上面的配置项openssl_pkey_export($res, $private_key, null, $config);//dump($private_key);//从资源中获取公钥数组信息$public_key_arr = openssl_pkey_get_details($res);$public_key = $public_key_arr["key"];dump($public_key);//这样我们就生成了一对公私钥, 我们可以把每个生成的公私钥保存到数据库,得到一个数据库的编号,然后把公钥数据传给请求方,请求方使用公钥加密数据之后, 再返回给服务器, 服务器使用私钥解密//签名 //签名是用公钥签名,使用私钥来验证签名openssl_sign($str,$sign,$private_key,OPENSSL_ALGO_SHA1);dump(openssl_verify($str,$sign,$public_key,OPENSSL_ALGO_SHA1));//有了上面的公钥,我们就可以用来加密、openssl_public_encrypt($str,$encrypted_data,$public_key);dump($encrypted_data);//解密数据openssl_private_decrypt($encrypted_data,$decrypted_data,$private_key);dump($decrypted_data);}

以上就是openssl 的用法


下面是一个 封装的 RSA 类 , 可以做参考

<?php/*** RSA签名类*/
class Rsa
{public $publicKey = '';public $privateKey = '';private $_privKey;/*** * private key*/private $_pubKey;/*** * public key*/private $_keyPath;/*** * the keys saving path*//*** * the construtor,the param $path is the keys saving path* @param string $publicKey  公钥* @param string $privateKey 私钥*/public function __construct($publicKey = null, $privateKey = null){$this->setKey($publicKey, $privateKey);}/*** 设置公钥和私钥* @param string $publicKey  公钥* @param string $privateKey 私钥*/public function setKey($publicKey = null, $privateKey = null){if (!is_null($publicKey)) {$this->publicKey = $publicKey;}if (!is_null($privateKey)) {$this->privateKey = $privateKey;}}/*** * setup the private key*/private function setupPrivKey(){if (is_resource($this->_privKey)) {return true;}$pem = chunk_split($this->privateKey, 64, "\n");$pem = "-----BEGIN PRIVATE KEY-----\n" . $pem . "-----END PRIVATE KEY-----\n";$this->_privKey = openssl_pkey_get_private($pem);return true;}/*** * setup the public key*/private function setupPubKey(){if (is_resource($this->_pubKey)) {return true;}$pem = chunk_split($this->publicKey, 64, "\n");$pem = "-----BEGIN PUBLIC KEY-----\n" . $pem . "-----END PUBLIC KEY-----\n";$this->_pubKey = openssl_pkey_get_public($pem);return true;}/*** * encrypt with the private key*/public function privEncrypt($data){if (!is_string($data)) {return null;}$this->setupPrivKey();$r = openssl_private_encrypt($data, $encrypted, $this->_privKey);if ($r) {return base64_encode($encrypted);}return null;}/*** * decrypt with the private key*/public function privDecrypt($encrypted){if (!is_string($encrypted)) {return null;}$this->setupPrivKey();$encrypted = base64_decode($encrypted);$r = openssl_private_decrypt($encrypted, $decrypted, $this->_privKey);if ($r) {return $decrypted;}return null;}/*** * encrypt with public key*/public function pubEncrypt($data){if (!is_string($data)) {return null;}$this->setupPubKey();$r = openssl_public_encrypt($data, $encrypted, $this->_pubKey);if ($r) {return base64_encode($encrypted);}return null;}/*** * decrypt with the public key*/public function pubDecrypt($crypted){if (!is_string($crypted)) {return null;}$this->setupPubKey();$crypted = base64_decode($crypted);$r = openssl_public_decrypt($crypted, $decrypted, $this->_pubKey);if ($r) {return $decrypted;}return null;}/*** 构造签名* @param string $dataString 被签名数据* @return string*/public function sign($dataString){$this->setupPrivKey();$signature = false;openssl_sign($dataString, $signature, $this->_privKey);return base64_encode($signature);}/*** 验证签名* @param string $dataString 被签名数据* @param string $signString 已经签名的字符串* @return number 1签名正确 0签名错误*/public function verify($dataString, $signString){$this->setupPubKey();$signature = base64_decode($signString);$flg = openssl_verify($dataString, $signature, $this->_pubKey);return $flg;}public function __destruct(){is_resource($this->_privKey) && @openssl_free_key($this->_privKey);is_resource($this->_pubKey) && @openssl_free_key($this->_pubKey);}
}
$publicKey = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKZ1mKTymRoGKnHiP1xAy4aiyt5r0BscCZnDAonCrMFZ4kBGriPNHxEaLr5lfBnMKw7k6i+2dsFPSEZooTvqtPUCAwEAAQ==';
$privateKey = 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEApnWYpPKZGgYqceI/XEDLhqLK3mvQGxwJmcMCicKswVniQEauI80fERouvmV8GcwrDuTqL7Z2wU9IRmihO+q09QIDAQABAkBunx3nGHXYjppsfn++7iyTd+I7+Agfy/0xWyB3rpEiGGgfemjcRFaeq5SC2vUNXsrEOY5gbUSQmFxH//Cym18NAiEA1z1cZx/Q9cbIjFPwp1a+K5CVFDXDcfbi/AQgAkVs0/cCIQDF+2fr23AoBslcOC4S0yAx94AbgxCntYuRqztxybsrcwIgMW86ZcT87TX2oaQ1xXk6vC68zqN6fBZEE7Wu1Fa1pAkCIElmOJP3qfAc/AAlj+dIwLHlqWgJwl3674CU9Bfui2bDAiEA0CKJpF8x7KANCcopEQC93PsbIztuML322LOfDV1Lw/k=';
$rsa=new Rsa($publicKey,$privateKey);
$str="abc";
echo "原始数据:".$str;
echo "<br/><hr>";
$res=$rsa->privEncrypt($str);
echo "私钥加密数据:".$res;
echo "<br/>";$res2=$rsa->pubDecrypt($res);
echo "公钥解密数据:".$res2;
echo "<br/><hr>";$res3=$rsa->pubEncrypt($str);
echo "公钥加密数据:".$res3;
echo "<br/>";$res4=$rsa->privDecrypt($res3);
echo "私钥解密数据:".$res4;
echo "<br/><hr>";echo "签名数据:".$str;
$res5=$rsa->sign($str);
echo "<br/>";
echo "签名结果:".$res5;
$res6=$rsa->verify($str,$res5);
echo "<br/>";
echo "验证签结果:".$res6;

相关文章:

php加密解密的用法(对称加密,非对称加密)

加密和摘要的区别 ***摘要&#xff1a;是从已知的数据中&#xff0c;通过摘要计算出一个值&#xff0c;一个数据对应一个或多个摘要的值 *** 比如&#xff1a;md5 和 sha1 sha256 hash 就是得到一个特定的值 &#xff0c;同一个数据得到的md5 是一样的&#xff0c;不会改变的 比…...

优秀智慧园区案例 - 中建科技产业园(中建·光谷之星),万字长文解析先进智慧园区建设方案经验

一、项目背景 中建科技产业园&#xff08;中建光谷之星&#xff09;&#xff0c;位于武汉光谷中心城、中国&#xff08;湖北&#xff09;自贸试验区武汉片区双核心区&#xff0c;光谷发展主轴高新大道北侧&#xff0c;建筑面积108万平米&#xff0c;是中建三局“中建之星”和“…...

Python基础详解教程------目录大纲

Python基础详解教程------让编程简单 目录 第一章、python基本概念规范... 5 1.1方法(Method)与函数(Function) 5 1.2类(Class)与函数(Function) 6 1.3变量(Variable)与参数(Parameter)及形参与实参... 7 1.4变量(Variable)与属性(Attribute)及property. 8 1.5对象(Objec…...

什么是高防IP?

什么是高防IP&#xff1f; 高防IP是针对互联网服务器在遭受大流量的DDOS攻击后导致服务不可用的情况下&#xff0c;推出的付费增值服务&#xff0c;用户可以通过配置高防IP&#xff0c;将攻击流量引流到高防IP&#xff0c;确保源站的稳定可靠。&#xff08;无需转移数据&#…...

打开word文档报错,提示HRESULT 0x80004005 位置: 部分: /word/comments.xml,行: 0,列: 0

某用户遇到这样一个奇怪的问题&#xff0c;就是回复完word的批注后&#xff0c;保存文档再打开就会报错&#xff0c;提示很抱歉&#xff0c;无法打开XXX&#xff0c;因为内容有问题。&#xff0c;详细信息提示HRESULT 0x80004005 位置: 部分: /word/comments.xml,行: 0,列: 0 c…...

Allegro层叠中的Etch Factor-铜皮的腐蚀因子如何计算

Allegro层叠中的Etch Factor-铜皮的腐蚀因子如何计算 在用Allegro进行PCB设计的时候,Cross-section中需要填入对应的信息,一般填入每层的厚度即可,如下图 当PCB需要进行仿真分析的时候,Etch-Factor这个值是必须要填写的,如下图 目前看到的都是90这个值,这是一个理论值。 …...

20 个好用的一行 Java代码

今天分享给大家20个 令人惊叹的 Java一行代码&#xff0c;让你们的工作更轻松。一起来看看吧&#xff01; 1. 获取浏览器 Cookie 的值 使用document.cookie 来获取 Cookie 的值。 2. 将 RGB 转换为十六进制 3. 复制到剪贴板 使用 navigator.clipboard.writeText 轻松将任何文本…...

Java编程--单例模式(饿汉模式/懒汉模式)/阻塞队列

前言 逆水行舟&#xff0c;不进则退&#xff01;&#xff01;&#xff01; 目录 单例模式 饿汉模式&#xff1a; 懒汉模式&#xff1a; 什么是阻塞队列 什么是高内聚 低耦合 阻塞队列的实现 单例模式 单例模式&#xff08;Singleton Pattern&#xff09;是一种常见…...

【go-zero】go-zero 脚手架 simple-admin 第二章:通过goctls生成api整个项目

往期回顾 一、simple-admin 开篇:安装 了解 goctls 二、go-zero 脚手架 simple-admin 第一章:通过goctls生成rpc整个项目 | go-zero整合 ENT数据库orm框架 本章内容 往期回顾一、simple-admin 创建rpc项目实战1、创建git仓库1.1、创建任意git仓库1.2、克隆到本地2、创建API项…...

小程序用户隐私设置指引

自2021年11月1日起&#xff0c;个人信息保护法正式执行了。微信小程序在这方面也加强了整改。小程序对涉及个人隐私使用的需要严格要求修改&#xff0c;不修正的小程序将被下架风险&#xff1b;新上线的小程序也要完善小程序个人隐私设置&#xff0c;不然代码提交不会通过。 小…...

Docker - 容器数据卷

Docker - 容器数据卷 什么是容器数据卷 等同于挂载&#xff0c;将容器内的目录地址指向于宿主机文件系统中 直接使用命令来挂载 -v docker run -it -v 主机目录:容器内目录# 测试 docker run -it -v /root:/home centos /bin/bash [rootiZ2zeg7mctvft5renx1qvbZ ~]# docker …...

YOLOv5独家最新改进《新颖高效AsDDet检测头》VisDrone数据集mAP涨点,即插即用|检测头新颖改进,性能高效涨点

💡本篇内容:YOLOv5独家最新改进《新颖高效AsDDet检测头》VisDrone数据集mAP涨点1.4%,即插即用|检测头新颖改进,性能高效涨点 💡🚀🚀🚀本博客 YOLO系列 + 全新新颖原创高效AsDDet检测头 改进创新点改进源代码改进 适用于 YOLOv5 按步骤操作运行改进后的代码即可…...

第十三章 网络管理实战1

第十三章 网络管理实战1 1osl模型 1.1简介 开发系统互联模型 开放式系统互联 国际标准化组织 ISO 指定定义了不同计算机互联的标准设计和描述 计算机网络通信的框架设计和描述 计算机网络通信的框架 全世界网络通信的工作分为7层 应用层表示层会话层传输层网络层数据链路…...

警惕!.360、.halo病毒来袭,这些建议能让你的数据安如泰山!

导言&#xff1a; 嘿&#xff0c;亲爱的读者们&#xff0c;今天91数据恢复讨论一个挑战性极高的问题——.halo、.360病毒&#xff0c;这可是个十足的恶棍&#xff0c;专门对你珍贵的数据下黑手&#xff01;别怕&#xff0c;我这就告诉你怎么防患于未然&#xff0c;还有被它拐走…...

ubuntu使用快照部署polygon全节点

文章目录 一、 环境部署1.1 golang环境部署1.2 git安装1.3 gcc安装1.4 zstd 安装1.5 pv 安装1.6 aria2c 安装二、安装 polygon2.1 heimdall 安装2.1.1 heimdall 编译2.1.2 初始化 heimdall2.1.3 修改配置文件2.2 bor 安装2.2.1 bor 编译2.2.2 创建bor数据目录2.2.3 修改配置文件…...

理解快速排序

理解快速排序 首先了解以下快速排序 快速排序&#xff08;QuickSort&#xff09;是一种常用的排序算法&#xff0c;属于比较排序算法的一种。它是由英国计算机科学家Tony Hoare于1960年提出的&#xff0c;是一种分而治之&#xff08;divide and conquer&#xff09;的算法。 …...

初始MySQL(三)(合计函数,分组函数,字符串相关函数,数字相关函数,时间日期函数,加密函数,流程控制函数)

目录 合计/统计函数 count 返回行的总数 sum 合计函数 - avg group by 字符串相关函数 数学相关函数 时间日期相关函数 加密函数 流程控制函数 合计/统计函数 count 返回行的总数 Select count(*) | count (列名) from tablename [WHERE where_definition] #演…...

AI系统ChatGPT源码+详细搭建部署教程+AI绘画系统+支持GPT4.0+Midjourney绘画+已支持OpenAI GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…...

程序员语录:一个真正有本事的人,往往有哪些特征呢?

目录 不要畏手畏脚&#xff0c;大胆去就是了 敢于拥抱成功&#xff0c;别怕抛头露面&#xff0c;别怕出丑丢人 永远不抱怨 凡事从利益的角度&#xff0c;摒弃情感&#xff08;感情除外&#xff09; 永远积极主动 人和人就是利益关系或者情绪价值 不在烂事上纠缠&#xf…...

做一个Springboot文章分类模块

目录 文章分类 1、新增文章分类 前言 代码编写 测试 2、 文章分类列表 前言 代码编写 测试 3、获取文章列表详情 前言 代码实现 测试 4、更新文章分类 前言 代码实现 测试 5、删除文章分类 前言 代码实现 测试 分页查询 文章列表条件分页 前言 代码编…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...