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

微信制作宣传网站有哪些内容/鼓楼网站seo搜索引擎优化

微信制作宣传网站有哪些内容,鼓楼网站seo搜索引擎优化,thinkphp5来做网站吗,网络工程有哪些整理了有关加密算法工具类,结合了几个博客以及自己改良后可直接使用,主要介绍以下四种加密方式:AES、DES、MD5、RSA,详细介绍都在注释里面有讲。 一、AES import com.alibaba.fastjson.JSONObject; import java.nio.charset.Sta…

整理了有关加密算法工具类,结合了几个博客以及自己改良后可直接使用,主要介绍以下四种加密方式:AES、DES、MD5、RSA,详细介绍都在注释里面有讲。

一、AES

import com.alibaba.fastjson.JSONObject;
import java.nio.charset.StandardCharsets;
import java.security.*;
import java.util.Base64;
import javax.crypto.*;
import javax.crypto.spec.*;/*** AES-对称加密算法(ECB、CBC模式)* AES使用128位、192位或256位密钥来加密和解密数据,每次加密或解密需要对数据进行128位、192位或256位的长加密,然后进行异或操作。*/
public class AESUtil {// 128位密钥 = 16 bytes Key:public static String key128 = "zhangximing";public static void main(String[] args) throws GeneralSecurityException {JSONObject param = new JSONObject();param.put("billCode", "FBX123456");param.put("remark","测试xxx");String message = param.toJSONString();byte[] data = message.getBytes(StandardCharsets.UTF_8);//对于ECB工作模式,我们使用"AES/ECB/PKCS5Padding"作为加密模式,//对于CBC工作模式,我们使用"AES/CBC/PKCS5Padding"作为加密模式。//加密后的密文将以Base64编码的形式输出。/*** ECB(Electronic Codebook)工作模式是AES加密算法的一种,它将明文分为固定大小的块,对每个块进行加密,然后将所有块的密文进行拼接,形成密文。* 这种模式的主要优点是简单、并行化处理和错误传播有限;缺点是容易受到密码本重放攻击的影响(密码本重放攻击是指攻击者在获得对数据进行加密的密钥后,再次使用相同的密钥加密相同的明文,从而获得相同的密文。),不适用于加密大量数据。*///ECB工作模式// 加密:byte[] encrypted = encryptECB(key128, data);String encodeToString = Base64.getEncoder().encodeToString(encrypted);System.out.println("Encrypted: " + encodeToString);// 解密:byte[] decrypted = decryptECB(key128, Base64.getDecoder().decode(encodeToString));System.out.println("Decrypted: " + new String(decrypted, StandardCharsets.UTF_8));/*** CBC(Cipher Block Chaining)工作模式也是AES加密算法的一种,它将明文分为固定大小的块,对每个块进行加密,并将前一个加密块与当前块进行异或操作(这里增加了额外参数设置了块与块之间的关联),然后将所有块的密文进行拼接,形成密文。* 这种模式的主要优点是能够抵御密码本重放攻击,适用于加密大量数据;缺点是需要额外的初始向量(IV)来确保加密的随机性,如果IV被泄露或者被攻击者捕获,可能会导致整个加密消息被解密。*///CBC工作模式// 加密:byte[] encrypted2 = encryptCBC(key128,data);System.out.println("Encrypted: " + Base64.getEncoder().encodeToString(encrypted2));// 解密:byte[] decrypted2 = decryptCBC(key128, encrypted2);System.out.println("Decrypted: " + new String(decrypted2, StandardCharsets.UTF_8));}// String类型加密:public static String encryptECB(String key, String input) throws GeneralSecurityException {byte[] bytes = AESUtil.encryptECB(key, input.getBytes(StandardCharsets.UTF_8));return Base64.getEncoder().encodeToString(bytes);}// 加密:public static byte[] encryptECB(String key, byte[] input) throws GeneralSecurityException {Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");SecretKey keySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "AES");cipher.init(Cipher.ENCRYPT_MODE, keySpec);return cipher.doFinal(input);}// 解密:public static String decryptECB(String key, String input) throws GeneralSecurityException {byte[] bytes = AESUtil.decryptECB(key128, Base64.getDecoder().decode(input));return new String( bytes, StandardCharsets.UTF_8);}// 解密:public static byte[] decryptECB(String key, byte[] input) throws GeneralSecurityException {Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");SecretKey keySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "AES");cipher.init(Cipher.DECRYPT_MODE, keySpec);return cipher.doFinal(input);}// 加密:public static byte[] encryptCBC(String key, byte[] input) throws GeneralSecurityException {Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "AES");// CBC模式需要生成一个16 bytes的initialization vector:SecureRandom sr = SecureRandom.getInstanceStrong();byte[] iv = sr.generateSeed(16);IvParameterSpec ivps = new IvParameterSpec(iv);cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivps);byte[] data = cipher.doFinal(input);// IV不需要保密,把IV和密文一起返回:return join(iv, data);}// 解密:public static byte[] decryptCBC(String key, byte[] input) throws GeneralSecurityException {// 把input分割成IV和密文:byte[] iv = new byte[16];byte[] data = new byte[input.length - 16];System.arraycopy(input, 0, iv, 0, 16);System.arraycopy(input, 16, data, 0, data.length);// 解密:Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "AES");IvParameterSpec ivps = new IvParameterSpec(iv);cipher.init(Cipher.DECRYPT_MODE, keySpec, ivps);return cipher.doFinal(data);}public static byte[] join(byte[] bs1, byte[] bs2) {byte[] r = new byte[bs1.length + bs2.length];System.arraycopy(bs1, 0, r, 0, bs1.length);System.arraycopy(bs2, 0, r, bs1.length, bs2.length);return r;}}

二、DES

import java.security.Key;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import com.alibaba.fastjson.JSONObject;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;/*** DES是一种对称加密算法,所谓对称加密算法:加密和解密使用相同的秘钥的算法* DES使用64位密钥来加密和解密数据,每次加密或解密需要64位密钥的循环左移和异或操作。**/
public class DESUtil {private static Key key;//设置秘钥keyprivate static String KEY_STR="guoyi";private static String CHARSETNAME="UTF-8";private static String ALGORITHM="DES";static{try{//生成DES算法对象KeyGenerator generator=KeyGenerator.getInstance(ALGORITHM);//运用SHA1安全策略SecureRandom secureRandom=SecureRandom.getInstance("SHA1PRNG");//设置上密钥种子secureRandom.setSeed(KEY_STR.getBytes());//初始化基于SHA1的算法对象generator.init(secureRandom);//生成密钥对象key=generator.generateKey();generator=null;}catch(Exception e){throw new RuntimeException(e);}}/*** 获取加密的信息* @param str* @return*/public static String getEncryptString(String str){//基于BASE64编码,接收byte[]并转换成StringBASE64Encoder base64Encoder=new BASE64Encoder();try {// 按UTF8编码byte[] bytes = str.getBytes(CHARSETNAME);// 获取加密对象Cipher cipher = Cipher.getInstance(ALGORITHM);// 初始化密码信息cipher.init(Cipher.ENCRYPT_MODE, key);// 加密byte[] doFinal = cipher.doFinal(bytes);// byte[]to encode好的String并返回return base64Encoder.encode(doFinal);} catch (Exception e) {throw new RuntimeException(e);}}/*** 获取解密之后的信息** @param str* @return*/public static String getDecryptString(String str) {// 基于BASE64编码,接收byte[]并转换成StringBASE64Decoder base64decoder = new BASE64Decoder();try {// 将字符串decode成byte[]byte[] bytes = base64decoder.decodeBuffer(str);// 获取解密对象Cipher cipher = Cipher.getInstance(ALGORITHM);// 初始化解密信息cipher.init(Cipher.DECRYPT_MODE, key);// 解密byte[] doFinal = cipher.doFinal(bytes);// 返回解密之后的信息return new String(doFinal, CHARSETNAME);} catch (Exception e) {throw new RuntimeException(e);}}public static void main(String[] args) {JSONObject param = new JSONObject();param.put("billCode", "FBX123456");param.put("remark","测试xxx");//加密String encryptString = getEncryptString(param.toJSONString());System.out.println(encryptString);//解密System.out.println(getDecryptString(encryptString));}
}

以上是AES和DES加密,顺带讲下区别:
加密速度:AES加密速度较快,比DES加密速度更快。
加密安全性:AES加密安全性更高,更难被暴力破解。
密钥长度:AES支持128位、192位和256位密钥长度,而DES只支持64位密钥长度。
数据长度:AES可以加密和解密任意长度的数据,而DES只能加密64位的数据块。
实现方式:AES是面向密码学的(比较复杂的情况),而DES是基于密码学协议的(一般用于信息通讯加密,身份验证等比较简单的情况)。
总的来说,AES比DES更安全、更快速、支持更多的密钥长度和数据长度,并且更易于实现。因此,在实际应用中,更推荐使用AES加密算法。

三、MD5

import com.alibaba.fastjson.JSONObject;
import java.security.MessageDigest;/*** MD5加密(不可逆,一般用于校验)*/
public class MD5Util {/*** 对传入的String进行MD5加密** @param s* @return*/public static final String getMd5(String s) {// 16进制数组char hexDigits[] = { '5', '0', '5', '6', '2', '9', '6', '2', '5', 'q', 'b', 'l', 'e', 's', 's', 'y' };try {char str[];// 将传入的字符串转换成byte数组byte strTemp[] = s.getBytes();// 获取MD5加密对象MessageDigest mdTemp = MessageDigest.getInstance("MD5");// 传入需要加密的目标数组mdTemp.update(strTemp);// 获取加密后的数组byte md[] = mdTemp.digest();int j = md.length;str = new char[j * 2];int k = 0;// 将数组做位移for (int i = 0; i < j; i++) {byte byte0 = md[i];str[k++] = hexDigits[byte0 >>> 4 & 0xf];str[k++] = hexDigits[byte0 & 0xf];}// 转换成String并返回return new String(str);} catch (Exception e) {return null;}}public static void main(String[] args) {JSONObject param = new JSONObject();param.put("billCode", "FBX123456");param.put("remark","测试xxx");String content = param.toJSONString();System.out.println(MD5Util.getMd5(content));//5y6y9590ssq2bss56ss6b5eybs6595b5}
}

四、RSA

import com.alibaba.fastjson.JSONObject;
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.Base64;
import java.util.HashMap;
import java.util.Map;/*** RSA 是一种基于公钥加密算法,它可以在不共享密钥的情况下,使用公钥加密信息,并使用私钥解密信息。* 一般来说是公钥加密,私钥解密。因为公钥用于公开给多个人,而私钥是个人的,然后私钥加密的一般用于加签的形式,但是容易信息泄漏,因为含明文(RSA加签在许多应用场景中都有广泛应用,例如数字证书、电子签名等。)。* 加密:公钥放在客户端,使用公钥对数据进行加密,服务端拿到数据后用私钥进行解密。* 加签:私钥放在客户端,使用私钥对数据进行加签,服务端拿到数据后用公钥进行验签。*/
public class RSAUtil {private final static String RSA_ALGORITHM = "RSA";private final static String SIGNATURE_ALGORITHM = "MD5withRSA";private final static String RSA_PUBLIC_KEY = "RSAPublicKey";private final static String RSA_PRIVATE_KEY = "RSAPrivateKey";//base64对二进制数据进行编码解码public static String encodeBase64(byte[] binaryData) {Base64.Encoder encoder = Base64.getEncoder();return encoder.encodeToString(binaryData);}public static byte[] decodeBase64(String encoded) {Base64.Decoder decoder = Base64.getDecoder();return decoder.decode(encoded);}//生成密钥对public static Map<String,Object> getKey() throws NoSuchAlgorithmException {// 因为只存公钥和私钥,所以指明Map的长度是2Map<String,Object> keyMap = new HashMap<String,Object>(2);// 获取RSA算法实例KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(RSA_ALGORITHM);// 1024代表密钥二进制位数keyPairGen.initialize(1024);// 产生KeyPair工厂KeyPair keyPair = keyPairGen.generateKeyPair();RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();keyMap.put(RSA_PUBLIC_KEY, publicKey);keyMap.put(RSA_PRIVATE_KEY, privateKey);return keyMap;}/*** 使用私钥对数据进行加密*/public static byte[] encryptPrivateKey(byte[] binaryData, String privateKey) throws Exception {byte[] keyBytes = decodeBase64(privateKey);PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);// 获取RSA算法实例KeyFactory keyFactory = KeyFactory.getInstance(RSA_ALGORITHM);Key priKey = keyFactory.generatePrivate(keySpec);// 初始化加密器Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());cipher.init(Cipher.ENCRYPT_MODE, priKey);return cipher.doFinal(binaryData);}/*** 使用公钥对数据进行加密*/public static byte[] encryptPublicKey(byte[] binaryData, String publicKey) throws Exception {byte[] keyBytes = decodeBase64(publicKey);X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);// 获取RSA算法实例KeyFactory keyFactory = KeyFactory.getInstance(RSA_ALGORITHM);Key pubKey = keyFactory.generatePublic(keySpec);// 初始化加密器Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());cipher.init(Cipher.ENCRYPT_MODE, pubKey);return cipher.doFinal(binaryData);}/*** 使用私钥对数据进行解密*/public static byte[] decryptPrivateKey(byte[] binaryData, String privateKey) throws Exception {byte[] keyBytes = decodeBase64(privateKey);PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);// 获取RSA算法实例KeyFactory keyFactory = KeyFactory.getInstance(RSA_ALGORITHM);Key priKey = keyFactory.generatePrivate(keySpec);// 初始化加密器Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());cipher.init(Cipher.DECRYPT_MODE, priKey);return cipher.doFinal(binaryData);}/*** 使用公钥对数据进行解密*/public static byte[] decryptPublicKey(byte[] binaryData, String publicKey) throws Exception {byte[] keyBytes = decodeBase64(publicKey);X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);// 获取RSA算法实例KeyFactory keyFactory = KeyFactory.getInstance(RSA_ALGORITHM);Key pubKey = keyFactory.generatePublic(x509KeySpec);// 初始化加密器Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());cipher.init(Cipher.DECRYPT_MODE, pubKey);return cipher.doFinal(binaryData);}/*** 使用私钥对数据进行签名*/public static String sign(byte[] binaryData, String privateKey)throws Exception {byte[] keyBytes = decodeBase64(privateKey);PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);// 获取RSA算法实例KeyFactory keyFactory = KeyFactory.getInstance(RSA_ALGORITHM);PrivateKey priKey = keyFactory.generatePrivate(keySpec);// 获取签名算法Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);signature.initSign(priKey);signature.update(binaryData);return encodeBase64(signature.sign());}/*** 使用公钥对数据签名进行验证*/public static boolean verify(byte[] binaryData, String publicKey, String sign)throws Exception {byte[] keyBytes = decodeBase64(publicKey);X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);// 获取RSA算法实例KeyFactory keyFactory = KeyFactory.getInstance(RSA_ALGORITHM);PublicKey pubKey = keyFactory.generatePublic(keySpec);// 获取签名算法Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);signature.initVerify(pubKey);signature.update(binaryData);return signature.verify(decodeBase64(sign));}//公钥public static String getPublicKey(Map<String,Object> map){RSAPublicKey rsaPublicKey = (RSAPublicKey) map.get(RSA_PUBLIC_KEY);byte[] publicKeyBytes = rsaPublicKey.getEncoded();return encodeBase64(publicKeyBytes);}//密钥public static String getPrivateKey(Map<String,Object> map){RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) map.get(RSA_PRIVATE_KEY);byte[] privateKeyBytes = rsaPrivateKey.getEncoded();return encodeBase64(privateKeyBytes);}//测试public static void main(String[] args) throws Exception {// 1.获取公钥私钥Map<String,Object> map = getKey();System.out.println("公钥:"+getPublicKey(map));System.out.println("私钥:"+getPrivateKey(map));JSONObject param = new JSONObject();param.put("billCode", "FBX123456");param.put("remark","测试xxx");String content = param.toJSONString();System.out.println("============   分隔符     ===========");// 2.使用私钥加密byte[] encodeContent = encryptPrivateKey(content.getBytes(),getPrivateKey(map));//转字符串String encodeContentStr = Base64.getEncoder().encodeToString(encodeContent);//翻转字节数组byte[] encodeContentB = Base64.getDecoder().decode(encodeContentStr);System.out.println("私钥加密后的数据:"+ encodeContentStr);// 3.使用公钥解密byte[] decodeContent = decryptPublicKey(encodeContentB,getPublicKey(map));System.out.println("公钥解密后的数据:"+new String(decodeContent));System.out.println("============   分隔符     ===========");// 4.使用公钥加密byte[] encodeContent2 = encryptPublicKey(content.getBytes(),getPublicKey(map));//转字符串String encodeContentStr2 = Base64.getEncoder().encodeToString(encodeContent2);//翻转字节数组byte[] encodeContentB2 = Base64.getDecoder().decode(encodeContentStr2);System.out.println("公钥加密后的数据:"+encodeContentStr2);// 5.使用私钥解密byte[] decodeContent2 = decryptPrivateKey(encodeContentB2,getPrivateKey(map));System.out.println("私钥解密后的数据:"+new String(decodeContent2));System.out.println("============   分隔符     ===========");// 6.加签String sign = sign(content.getBytes(),getPrivateKey(map));System.out.println("加签后的数据:"+sign);// 7.验签boolean result = verify(content.getBytes(),getPublicKey(map),sign);System.out.println("验签结果:"+result);}
}

运行结果:

公钥:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDbLgxOXD+GOmjuPCxdJiiSvgkGxILKUw0+P7OmpJ2YPgrLZIQqTzdyleAlOYkan5/r3Yh0O8A8Ysp9iXRBLdWgUML9y4DBBO3esUP4uiNlJ/iRHVjvcSjLgpi2dH4iXABiYmjDGZ+Ly31R8KoFa+xmO/G9CkkU/vpoL9WrNYUyiwIDAQAB
私钥:MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBANsuDE5cP4Y6aO48LF0mKJK+CQbEgspTDT4/s6aknZg+CstkhCpPN3KV4CU5iRqfn+vdiHQ7wDxiyn2JdEEt1aBQwv3LgMEE7d6xQ/i6I2Un+JEdWO9xKMuCmLZ0fiJcAGJiaMMZn4vLfVHwqgVr7GY78b0KSRT++mgv1as1hTKLAgMBAAECgYEAsKqQPsU6at4/3+9erwJn58gHjI3vAlgpL4i3LNY5NRKlLsZphZTuk4zc7ARRT8VkaQDa0R2sWMAkiUW3ECZ6rkzCShSB1WZvJ/vIRGQEXamVuTwDTDzcSsZow7uW3d6TVbZ+RDmFxhUd27BEqZemPX8YtmLPv8X92S9uA2deJgkCQQD4N8gNGcbNM+bcjv610aTieQwEJTr1CoUmSTGifF7uYP6vSKwzX7LhANLIy4ogZ4oQiaS/oxuHF20KUV7WBHVXAkEA4g00deOd9Z8oLUFcN/xaYWzC3UpxL13YFkQZu3vWMgNzwsTaAg/LXxOE/C8OGCK5Vp58dvOZEbOjQ67w1hxX7QJADx2egiW6tI5flbjjjAD7UItcjvgRchC08RLuAd4fDdc8S0Jasjo2s3sQWwgCHl0PzFgFf2IYcA6eJk20P8Y/uwJBANdqCAUT3LJ1cf72WyAK/kH7OBNTXlrqDgLh8LemQi809Pq1Rp9SV9aJrl/3o3HCnWX679cXOlYRHtNgAae4KN0CQAPbFAlGBj1SX9M4imTH2EN+HcKQeXykCgs8/7lp8mp2sX4bwvMYpRhSDP0J8kpjcSF3TO5CldrV/iWAsqeJxDA=
============   分隔符     ===========
私钥加密后的数据:zSB0VYpAtzhfLUbmILcahTAG/6t60XUZ/lN7GKWrlDhM27yZaRx3pXh0cdZFLnsfe6zEKEzZ+iMTrDcXxVsrK2GfBrUmBtXi+gniaAUUPw/F/yMH3pX25P2kvFhLRxkLleUuoe2vqTEtWnu5ta3ueOW7kfVii8TGUOID8y1vJI0=
公钥解密后的数据:{"billCode":"FBX123456","remark":"测试xxx"}
============   分隔符     ===========
公钥加密后的数据:yVT+6AHk4dMKhBUCiUTVNRY6tE7hUtkIeDV6fQ5xrL6ZzHfR2OdvrnXOArAaglE6QVmQhteNm9eC9xa3cRAbk2jboAWJ2OGda5DDj2qjnem1Z7ykn4GnqOfHxbxCvpKtDM6B5iNQKmCskIhR/44Z5g7JFEaMXVJSqF/JJWxer+4=
私钥解密后的数据:{"billCode":"FBX123456","remark":"测试xxx"}
============   分隔符     ===========
加签后的数据:De656tVltViMDPm3LEwivqH0i6kwukvZQQCRfkMxXRtNAKnpSGvRZ4axNXi9FIB5VO+nmHv5ujHllfKfVKaC6AGrMe18CaIoaxp1ekr+l7Um1N2L1hR6S6/KdwETuEPj9u2HkcDp0OMZkBQe/EJhM3v7HCd3gEhSsDY/uguWrms=
验签结果:true

相关文章:

Java加密算法工具类(AES、DES、MD5、RSA)

整理了有关加密算法工具类&#xff0c;结合了几个博客以及自己改良后可直接使用&#xff0c;主要介绍以下四种加密方式&#xff1a;AES、DES、MD5、RSA&#xff0c;详细介绍都在注释里面有讲。 一、AES import com.alibaba.fastjson.JSONObject; import java.nio.charset.Sta…...

探索Go语言的魅力:一门简洁高效的编程语言

介绍Go语言&#xff1a; Go&#xff0c;也被称为Golang&#xff0c;是由Google开发的一门开源编程语言。它结合了现代编程语言的优点&#xff0c;拥有高效的并发支持和简洁的语法&#xff0c;使其成为构建可伸缩、高性能应用的理想选择。 Go语言的特性&#xff1a; 并发编程…...

【用unity实现100个游戏之19】制作一个3D传送门游戏,实现类似鬼打墙,迷宫,镜子,任意门效果

最终效果 文章目录 最终效果素材第一人称人物移动开门效果显示原理渲染相机跟着我们视角移动门的摄像机跟着我们旋转近裁剪面设置传送配置代码实现传送效果结束完结素材 https://assetstore.unity.com/packages/3d/props/interior/door-free-pack-aferar-148411...

DRF(Django Rest Framework)框架基于restAPI协议规范的知识点总结

Django Rest Framework学习 一、初识DRF组件 1.1 FBV和CBV FBV&#xff1a;function based view from django.shortcuts import render, HttpResponse # 这种是基于FBV模式 函数模式实现Views函数 def login(request):if request.method GET:return HttpResponse("Get…...

Linux磁盘与文件系统管理

目录 在linux系统中使用硬盘 磁盘的数据结构 磁盘接口类型 字母含义 MBR磁盘分区 分区类型 分区的缺点 文件系统的 文件系统有什么作用 文件系统的修复 检测并确认新磁盘 参看磁盘信息 查看磁盘信息 添加磁盘 查看添加磁盘情况&#xff1a;sda系统磁盘&#xff…...

数字魔法AI绘画的艺术奇迹-用Stable Diffusion挑战无限可能【文末送书-12】

文章目录 前言一. 技术原理1.1 发展历程 二.对艺术领域的影响三. 挑战与机遇四.AI魔法绘画&#xff1a;用Stable Diffusion挑战无限可能【文末送书-12】4.1 粉丝福利&#xff1a;文末推荐与福利免费包邮送书&#xff01; 前言 随着人工智能技术的迅猛发展&#xff0c;AI在各个…...

【docker实战】02 用docker安装mysql

本示例采用bitnami的镜像进行安装MySQL 一、镜像搜索 先搜索一下mysql有哪些镜像 [rootlocalhost ~]# docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql …...

循环渲染ForEach

目录 1、接口说明 2、键值生成规则 3、组件创建规则 3.1、首次渲染 3.2、非首次渲染 4、使用场景 4.1、数据源不变 4.2、数据源组项发生变化 4.3、数据源数组项子属性变化 5、反例 5.1、渲染结果非预期 5.2、渲染性能降低 Android开发中我们有ListView组件、GridVi…...

纷享销客华为云:如何让企业多一个选择?

纷享销客携手华为云推出多项联合解决方案&#xff0c;为企业的数字化提供了一个新选择。12月12日&#xff0c;纷享销客&华为云联合解决方案发布会在北京举办。本次发布会以“「CRM云」让企业多一个选择”为主题&#xff0c;来自行业头部企业的CEO、CIO、业务负责人等&#…...

前端实现断点续传文件

公司要求实现的功能&#xff0c;大概思路是将上传的文件通过jsZip压缩后&#xff0c;进行切片&#xff0c;留一下总切片&#xff0c;当前片&#xff0c;并把这些数据给后端&#xff0c;至于前端的校验&#xff0c;是由Md5完成的&#xff0c;验证文件唯一性&#xff0c;这样下次…...

复试 || 就业day01(2023.12.27)算法篇

文章目录 前言两数之和存在重复元素 II好数对的数目总持续时间可被 60 整除的歌曲 前言 &#x1f4ab;你好&#xff0c;我是辰chen&#xff0c;本文旨在准备考研复试或就业 &#x1f4ab;文章题目大多来自于 leetcode&#xff0c;当然也可能来自洛谷或其他刷题平台 &#x1f4a…...

JavaWeb——JQuery

文章目录 JQuery 是什么?jQuery 的原理示意图JQuery 基本开发步骤jQuery 对象和 DOM 对象将dom对象转为JQuery对象jQuery 对象转成 DOM 对象jQuery 选择器基本选择器基础过滤选择器JQuery 是什么? 基本介绍 jQuery 是一个快速的,简洁的 javaScript 库,使用户能更方便地处理…...

Python教程:查询Py模块的版本号,有哪些方法?

1.查看模块内部的版本信息&#xff1a;如果你已经导入了该模块&#xff0c;可以查看模块内部的__version__属性来获取版本信息。例如&#xff0c;对于pandas模块&#xff0c;可以运行import pandas和print(pandas.version)来获取版本信息。 import pandas print(pandas.__vers…...

第一节 初始化项目

系列文章目录 第一节 初始化项目 文章目录 操作步骤 总结 操作步骤 打开cmd 输入 vue ui 在打开的网页中点击“创建”&#xff0c;复制文件夹路径并粘贴点击“在此创建新项目” 输入项目名称 点击下一步选择手动配置 选择babel、router、vuex、css pre-processors、 linter建…...

idea提示unable to import maven project

问题描述&#xff1a; idea导入maven依赖时提示unable to import maven project 打开log日志如下&#xff1a; 问题原因以及解决方案&#xff1a; maven版本与idea版本不兼容&#xff0c;切换maven版本即可...

【Spring】SpringBoot日志

文章目录 什么是日志日志的用途日志的使用如何打印日志日志级别日志框架门面模式&#xff08;外观模式&#xff09;日志级别的使用配置日志级别日志持久化配置日志的存储目录配置日志文件名配置日志文件分割 更简单的日志输出 什么是日志 在计算机领域&#xff0c;日志是一个记…...

HTML+CSS制作动漫绿巨人

🎀效果展示 🎀代码展示 <!DOCTYPE html> <html lang="en" > <head>...

AGV智能搬运机器人-替代人工工位让物流行业降本增效

在当今快速发展的世界中&#xff0c;物流业面临着巨大的挑战&#xff0c;包括提高效率、降低成本和优化工作流程。为了应对这些挑战&#xff0c;一种新型的自动化设备——智能搬运机器人正在崭露头角。本文将通过一个具体的案例来展示富唯智能转运机器人在实际应用中的价值。 案…...

【办公技巧】怎么批量提取文件名到excel

Excel是大家经常用来制作表格的文件&#xff0c;比如输入文件名&#xff0c;如果有大量文件需要输入&#xff0c;用张贴复制或者手动输入的方式还是很费时间的&#xff0c;今天和大家分享如何批量提取文件名。 打开需要提取文件名的文件夹&#xff0c;选中所有文件&#xff0c…...

uniapp实现前端银行卡隐藏中间的数字,及隐藏姓名后两位

Vue 实现前端银行卡隐藏中间的数字 主要应用了 filters过滤器 来实现效果 实现效果&#xff0c;如图&#xff1a; <template><div><div style"background-color: #f4f4f4;margin:50px 0 0 460px;width:900px;height:300px;"><p>原来&#…...

HPCC:高精度拥塞控制

HPCC&#xff1a;高精度拥塞控制 文章目录 HPCC&#xff1a;高精度拥塞控制摘要1 引言1.1 背景1.2 现有CC的局限性1.3 HPCC的提出 2 研究动机2.1 大型RDMA部署2.2 RDMA目标2.3 当前RDMA CC中的权衡DCQCNTIMELY 2.4 下一代高速CC 3 技术方案3.1 INT3.2 HPCC设计3.3 HPPC的参数 4…...

centos 配置 git 连接 github

centos 配置 git 连接 github 首先安装 git 创建 ssh key ssh-keygen -t rsa复制公钥 cat ~/.ssh/id_rsa.pub # 打印出公钥内容然后复制配置 github 登录网页 github 账号&#xff1b;进入 setting&#xff1b;点击 SSH and GPG keys&#xff0c;点击 New SSH keytitile 随便填…...

SpringBoot发布项目到docker

Dockerfile FROM openjdk:11 # 作者 MAINTAINER chenxiaodong<2774398338qq.com># 安装 vim # RUN yum -y install vim# 环境变量 # 进入容器后的默认工作目录 ENV WORKPATH /usr/local/webapp ENV EXECFILE Docker2Application-0.0.1-SNAPSHOT.jarRUN mkdir -p $WORKPA…...

sheng的学习笔记-卷积神经网络

源自吴恩达的深度学习课程&#xff0c;仅用于笔记&#xff0c;便于自行复习 导论 1&#xff09;什么是卷积神经网络 卷积神经网络&#xff0c;也就是convolutional neural networks &#xff08;简称CNN&#xff09;&#xff0c;使用卷积算法的神经网络&#xff0c;常用于计…...

数据库:园林题库软件(《中国古代园林史》答题卷一 )

《中国古代园林史》答题卷一 填空题 1、中国古代园林曾被誉为“世界园林之母”。国际风景园林师联合会(IFLA)的创始人、著名风景园林师和教育家杰里柯爵士( Sir Geoffrey Alan Jellicoe)把中国古代园林和西亚园林以及古希腊园林列为世界三大园林体系之首。 2、中国古代园林是…...

upset 绘制

好久没有更新,今天来一个upset图的绘制 1.1 安装包 #绘制upset的包现在看来有三个 ## UpSet ### 最基本的upsetR包,使用方便,但是扩展不方便 devtools::install_github("hms-dbmi/UpSetR") ## complex-upset ### UpSet的升级款 支持ggplot2 devtools::install_git…...

声明 | 为打击假冒账号、恶意抄袭账号等诈骗活动,提升本账号权威,本博主特此郑重声明

声明 | 为打击假冒账号、恶意抄袭账号诈骗活动&#xff0c;提升本账号权威&#xff0c;本博主特此郑重声明 一、本账号为《机器学习之心》博主CSDN唯一官方账号&#xff0c;唯一联系方式见文章底部。 二、《机器学习之心》博主未授权任何第三方账号进行模型合作、程序设计、源…...

云计算:OpenStack 配置二层物理网卡为三层桥的接口

目录 一、理论 1.OpenStack 二、实验 1. Linux系统修改网卡 2.OpenStack 配置二层物理网卡为三层桥的接口 一、理论 1.OpenStack &#xff08;1&#xff09;概念 OpenStack是一个开源的云计算管理平台项目&#xff0c;是一系列软件开源项目的组合。由NASA(美国国家航空…...

Python sanic框架钉钉和第三方打卡机实现

同样还是需要开通钉钉应用这里就不错多说了 第一步:梳理逻辑流程 前提&#xff1a;打卡的机器是使用postgres数据库&#xff0c;由于因为某些原因&#xff0c;钉钉userId 我已经提前获取到了存放到数据库里。 1.用户打卡成功后&#xff0c;我们应该监听数据库进行查询&#xf…...

微信小程序性能优化

1. 代码包不包含插件大小超过 1.5 M 建议&#xff1a;小程序代码包单个包大小限制为2M。因此我们建议开发者在开发时&#xff0c;如果遇到单包体积大于1.5M的情况&#xff0c;可以采取分包的方式&#xff0c;把部分代码拆分到分包去&#xff0c;降低单个包的体积&#xff0c;提…...