加密解密(四)——非对称加密算法
一.什么是非对称加密算法
非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
相对于对称加密算法而言,非对称加密算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。对称密码体制中只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。所以保证其安全性就是保证密钥的安全,而非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了。这样安全性就大了很多。
二.常见的非对称加密算法
在非对称加密中使用的主要算法有:D-H、RSA、Elgamal、背包算法、Rabin、ECC(椭圆曲线加密算法)等。
X509EncodedKeySpec:此类表示公钥的ASN.1编码,根据ASN.1类型SubjectPublicKeyInfo进行编码。
PKCS8EncodedKeySpec:该类代表私有密钥的ASN.1编码,根据ASN.1类型PrivateKeyInfo进行编码。
(1).DH算法
传统上,双方之间的安全加密通信要求他们首先通过一些安全的物理通道(例如由信任的快递运送的纸钥匙列表)来交换密钥。Diffie-Hellman密钥交换方法允许没有彼此之前的知识的两方在不安全的信道上共同建立共享密钥。该密钥然后可以用于使用对称密钥密码来加密后续通信。
1.甲方构建密钥对儿,将公钥公布给乙方,将私钥保留;双方约定数据加密算法;乙方通过甲方公钥构建密钥对儿,将公钥公布给甲方,将私钥保留。
2.甲方使用私钥、乙方公钥、约定数据加密算法构建本地密钥,然后通过本地密钥加密数据,发送给乙方加密后的数据;乙方使用私钥、甲方公钥、约定数据加密算法构建本地密钥,然后通过本地密钥对数据解密。
3.乙方使用私钥、甲方公钥、约定数据加密算法构建本地密钥,然后通过本地密钥加密数据,发送给甲方加密后的数据;甲方使用私钥、乙方公钥、约定数据加密算法构建本地密钥,然后通过本地密钥对数据解密。
package demo.dh;import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.HashMap;
import java.util.Map;import javax.crypto.Cipher;
import javax.crypto.KeyAgreement;
import javax.crypto.SecretKey;
import javax.crypto.interfaces.DHPublicKey;
import javax.crypto.spec.DHParameterSpec;import org.junit.Test;import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;public class Demo01_DH {private String messageToB = "This is A TO B";private String messageToA = "This is B TO A";private final String ALGORITHM = "DH";public static final String SECRET_ALGORITHM = "DES";private final int KEY_SIZE = 512;private final String PUBLIC_KEY = "DHPublicKey";private final String PRIVATE_KEY = "DHPrivateKey";private BASE64Encoder base64Encoder = new BASE64Encoder();private BASE64Decoder base64Decoder = new BASE64Decoder();@Testpublic void testDH() throws Exception {Map<String, Object> aKeyMap = initKey();String aPublicKey = getPublicKey(aKeyMap);String aPrivateKey = getPrivateKey(aKeyMap);System.err.println("甲方公钥:\r" + aPublicKey);System.err.println("甲方私钥:\r" + aPrivateKey);Map<String, Object> bKeyMap = initKey(aPublicKey);String bPublicKey = getPublicKey(bKeyMap);String bPrivateKey = getPrivateKey(bKeyMap);System.err.println("乙方公钥:\r" + bPublicKey);System.err.println("乙方私钥:\r" + bPrivateKey);System.out.println("原文:" + messageToB);byte[] aCode = encrypt(messageToB.getBytes(), aPublicKey, bPrivateKey);System.out.println("密文:"+base64Encoder.encode(aCode));byte[] aDecode = decrypt(aCode, bPublicKey, aPrivateKey);String aOutput = (new String(aDecode));System.out.println("解密:" + aOutput);System.out.println(" ===============反过来加密解密================== "); System.out.println("原文: " + messageToA); // 由乙方公钥,甲方私钥构建密文 byte[] bCode = encrypt(messageToA.getBytes(), bPublicKey,aPrivateKey); System.out.println("密文:"+base64Encoder.encode(bCode));// 由甲方公钥,乙方私钥解密 byte[] bDecode = decrypt(bCode, aPublicKey, bPrivateKey); String bOutput = (new String(bDecode)); System.out.println("解密: " + bOutput); }// 初始化密钥private Map<String, Object> initKey() throws NoSuchAlgorithmException {// 密钥对的生成器KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(ALGORITHM);// 初始化密钥对生成器keyPairGenerator.initialize(KEY_SIZE);KeyPair keyPair = keyPairGenerator.generateKeyPair();// 甲方公钥PublicKey publicKey = keyPair.getPublic();// 甲方私钥PrivateKey privateKey = keyPair.getPrivate();Map<String, Object> keyMap = new HashMap<String, Object>(2);keyMap.put(PUBLIC_KEY, publicKey);keyMap.put(PRIVATE_KEY, privateKey);return keyMap;}public Map<String, Object> initKey(String key) throws Exception {// 解析甲方公钥byte[] keyBytes = base64Decoder.decodeBuffer(key);X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);PublicKey pubKey = keyFactory.generatePublic(x509KeySpec);// 由甲方公钥构建乙方密钥DHParameterSpec dhParamSpec = ((DHPublicKey) pubKey).getParams();KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(keyFactory.getAlgorithm());keyPairGenerator.initialize(dhParamSpec);KeyPair keyPair = keyPairGenerator.generateKeyPair();// 乙方公钥PublicKey publicKey = keyPair.getPublic();// 乙方私钥PrivateKey privateKey = keyPair.getPrivate();Map<String, Object> keyMap = new HashMap<String, Object>(2);keyMap.put(PUBLIC_KEY, publicKey);keyMap.put(PRIVATE_KEY, privateKey);return keyMap;}/*** 加密* * @param data* 待加密数据* @param publicKey* 甲方公钥* @param privateKey* 乙方私钥* @return* @throws Exception*/private byte[] encrypt(byte[] data, String publicKey, String privateKey) throws Exception {// 生成本地密钥SecretKey secretKey = getSecretKey(publicKey, privateKey);// 数据加密Cipher cipher = Cipher.getInstance(secretKey.getAlgorithm());cipher.init(Cipher.ENCRYPT_MODE, secretKey);return cipher.doFinal(data);}/** * 解密* * @param data * 待解密数据 * @param publicKey * 乙方公钥 * @param privateKey * 乙方私钥 * @return * @throws Exception */ public byte[] decrypt(byte[] data, String publicKey, String privateKey) throws Exception { // 生成本地密钥 SecretKey secretKey = getSecretKey(publicKey, privateKey); // 数据解密 Cipher cipher = Cipher.getInstance(secretKey.getAlgorithm()); cipher.init(Cipher.DECRYPT_MODE, secretKey); return cipher.doFinal(data); } /** * 构建密钥 * @param publicKey * 公钥 * @param privateKey * 私钥 * @return * @throws Exception */ private SecretKey getSecretKey(String publicKey, String privateKey) throws Exception {byte[] pubKeyBytes = base64Decoder.decodeBuffer(publicKey);KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(pubKeyBytes);PublicKey pubKey = keyFactory.generatePublic(x509KeySpec);// 初始化私钥byte[] priKeyBytes = base64Decoder.decodeBuffer(privateKey);PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(priKeyBytes);Key priKey = keyFactory.generatePrivate(pkcs8KeySpec);KeyAgreement keyAgree = KeyAgreement.getInstance(keyFactory.getAlgorithm());keyAgree.init(priKey);keyAgree.doPhase(pubKey, true);// 生成本地密钥SecretKey secretKey = keyAgree.generateSecret(SECRET_ALGORITHM);return secretKey;}/*** 取得私钥* * @param keyMap* @return* @throws Exception*/public String getPrivateKey(Map<String, Object> keyMap) throws Exception {Key key = (Key) keyMap.get(PRIVATE_KEY);return base64Encoder.encode(key.getEncoded());}/*** 取得公钥* * @param keyMap* @return* @throws Exception*/public String getPublicKey(Map<String, Object> keyMap) throws Exception {Key key = (Key) keyMap.get(PUBLIC_KEY);return base64Encoder.encode(key.getEncoded());}
}
(2).RSA算法
RSA同时有两把钥匙,公钥与私钥。同时支持数字签名。数字签名的意义在于,对传输过来的数据进行校验。确保数据在传输工程中不被修改。
RSA算法包括四个步骤:密钥生成,密钥分发,加密和解密。
RSA是一个相对较慢的算法,因此,它不太常用于直接加密用户数据。更经常地,RSA通过加密的共享密钥,用于对称密钥加密,这又可以以更高的速度执行批量加密 - 解密操作。
package demo.rsa;import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.HashMap;
import java.util.Map;import javax.crypto.Cipher;import org.junit.Before;
import org.junit.Test;import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;public class Demo01_RSA {private String message = "This is message";private int keySize = 512;public String KEY_ALGORITHM = "RSA";public String SIGNATURE_ALGORITHM = "MD5withRSA";private String PUBLIC_KEY = "RSAPublicKey";private String PRIVATE_KEY = "RSAPrivateKey";private BASE64Encoder base64Encoder = new BASE64Encoder();private BASE64Decoder base64Decoder = new BASE64Decoder();String publicKey;String privateKey;@Beforepublic void ready() throws Exception {Map<String, Object> keyMap = initKey();publicKey = getPublicKey(keyMap);privateKey = getPrivateKey(keyMap);System.err.println("公钥:\r" + publicKey);System.err.println("私钥:\r" + privateKey);}@Testpublic void testEncryptDecrypt() throws Exception {System.err.println("公钥加密——私钥解密");System.err.println("加密前: " + message);byte[] data = message.getBytes();byte[] encodedData = encryptByPublicKey(data, publicKey);System.out.println("加密后的数据经Base64编码后为:" + base64Encoder.encode(encodedData));byte[] decodedData = decryptByPrivateKey(encodedData, privateKey);String outputStr = new String(decodedData);System.out.println("解密后: " + outputStr);}@Testpublic void testSign() throws Exception {System.err.println("私钥加密——公钥解密");byte[] data = message.getBytes();System.out.println("加密前: " + message);byte[] encodedData = encryptByPrivateKey(data, privateKey);System.out.println("加密后的数据经Base64编码后为:" + base64Encoder.encode(encodedData));byte[] decodedData = decryptByPublicKey(encodedData, publicKey);String outputStr = new String(decodedData);System.out.println("解密后: " + outputStr);System.err.println("私钥签名——公钥验证签名");// 产生签名String sign = sign(encodedData, privateKey);System.out.println("签名:\r" + sign);// 验证签名boolean status = verify(encodedData, publicKey, sign);System.out.println("状态:\r" + status);}/*** 初始化密钥* * @return* @throws Exception*/public Map<String, Object> initKey() throws Exception {KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM);keyPairGen.initialize(keySize);KeyPair keyPair = keyPairGen.generateKeyPair();// 公钥PublicKey publicKey = keyPair.getPublic();// 私钥PrivateKey privateKey = keyPair.getPrivate();Map<String, Object> keyMap = new HashMap<String, Object>(2);keyMap.put(PUBLIC_KEY, publicKey);keyMap.put(PRIVATE_KEY, privateKey);return keyMap;}/*** 用公钥加密* * @param data* @param key* @return* @throws Exception*/public byte[] encryptByPublicKey(byte[] data, String key) throws Exception {// 对公钥解密byte[] keyBytes = base64Decoder.decodeBuffer(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);}/*** 用私钥加密* * @param data* @param key* @return* @throws Exception*/public byte[] encryptByPrivateKey(byte[] data, String key) throws Exception {// 对密钥解密byte[] keyBytes = base64Decoder.decodeBuffer(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 data* @param key* @return* @throws Exception*/public byte[] decryptByPrivateKey(byte[] data, String key) throws Exception {// 对密钥解密byte[] keyBytes = base64Decoder.decodeBuffer(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 byte[] decryptByPublicKey(byte[] data, String key) throws Exception {// 对密钥解密byte[] keyBytes = base64Decoder.decodeBuffer(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 privateKey* 私钥* * @return* @throws Exception*/public String sign(byte[] data, String privateKey) throws Exception {// 解密由base64编码的私钥byte[] keyBytes = base64Decoder.decodeBuffer(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 base64Encoder.encode(signature.sign());}/*** 校验数字签名* * @param data* 加密数据* @param publicKey* 公钥* @param sign* 数字签名* @return 校验成功返回true 失败返回false* @throws Exception*/public boolean verify(byte[] data, String publicKey, String sign) throws Exception {// 解密由base64编码的公钥byte[] keyBytes = base64Decoder.decodeBuffer(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(base64Decoder.decodeBuffer(sign));}/*** 取得私钥* * @param keyMap* @return* @throws Exception*/public String getPrivateKey(Map<String, Object> keyMap) throws Exception {Key key = (Key) keyMap.get(PRIVATE_KEY);return base64Encoder.encode(key.getEncoded());}/*** 取得公钥* * @param keyMap* @return* @throws Exception*/public String getPublicKey(Map<String, Object> keyMap) throws Exception {Key key = (Key) keyMap.get(PUBLIC_KEY);return base64Encoder.encode(key.getEncoded());}
}
testEncryptDecrypt()方法的运行结果:
公钥:
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMEKI7YFB4sFyNuVERUKKZ3lDU8CcasqGI65RXHak3YS
pyQ0tH0AIiDKIl0xrrqMN+x7MUVFcn3Dkk0XysBeJGkCAwEAAQ==
私钥:
MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEAwQojtgUHiwXI25URFQopneUNTwJx
qyoYjrlFcdqTdhKnJDS0fQAiIMoiXTGuuow37HsxRUVyfcOSTRfKwF4kaQIDAQABAkBy+A78wVIU
woU2AjoCReMzXs/mVpZMUu39UurBPGTG1JnaCnNbeZiiKYnyDpRxU6G5EMz4Aj4zcpPvr8xM3oOB
AiEA/wwuulqdCg9tcCUq+UcnlOXXzXE6KBsJL+Jtm5tfQh0CIQDBwq3lvLh849tHXefrO54EzHw1
OtZprDusiqWX1/OZvQIgNEzMPDyenVSCjY+hm1KDBF6JfUBtu5GntaEJ9vHKe+UCIDD39aERMAMI
RxvjRMCzoX0O/Pkq9JNiXvZ9V9pnTn51AiAWI/mYGkvyA9YSaT4shuyHE/33GZ+ffC0Pw1vqfiZk
DA==
公钥加密——私钥解密
加密前: This is message
加密后的数据经Base64编码后为:eow5WTkbq6la9cJZx1D/SIjrpd+oDkttm7xGQ5WGyiBe0wvo4oDmczLAK+qGSL8VlvnUPbUrrlTR
lzmlhFPw4A==
解密后: This is message
testEncryptDecrypt()方法的运行结果:
公钥:
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJaCjaGhiwBRLAiahpFTUV/QaL6bIgMd/VBs36lgRJcJ
jCWP8jND5knYwgRglbyHsIQmjosytlH5FQ0MWzXbTicCAwEAAQ==
加密前: This is message
私钥:
MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEAloKNoaGLAFEsCJqGkVNRX9Bovpsi
Ax39UGzfqWBElwmMJY/yM0PmSdjCBGCVvIewhCaOizK2UfkVDQxbNdtOJwIDAQABAkAV3ZeX4LEh
9ajxAwoDuNf8lHlzH3R8gXHYqkiAAdVVH7tp7WrNdpetl5Bycg2Ofvv4oVv+Ozt26CXWW3hu5snR
AiEA4GN7mkH/rh1CO3tpsXbws7rHvXxzArYATmhKKsVdR78CIQCrtqgZl7ExQk6ShtqNP2r8eWx1
fQKbYSbC3Z5Fx0fTmQIhAMkpRoj/O/la76KlvBZFu/pUq3Z7WBwJD/M62arIbxy/AiBjMxm390d5
gqnrwpZeBWYkR22eDkNESoLfDrMR8seO+QIhAKYfO9qfueCZSQI3BF/IIvKF+fUuPFtd4ixw/Ypl
yult
私钥加密——公钥解密
加密后的数据经Base64编码后为:CfZMIuwE0LrvCpumDz/eHrxwI+R5FSqVcPeFLXO/mFtacnUa7fbYMzLIlECM+FJSQF685HJretnW
nh9fFk6YMQ==
解密后: This is message
私钥签名——公钥验证签名
签名:
hzJXB5DT8cxnqvLEMjpiYzSSozGi8w51WOQ4/okdND/i8JeUgwfC4OPLrd3D73Uyl66ki0jziz35
foZq18CE6Q==
状态:
true
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- Teradata Automation Developer 职位
Position Title: TRM Automation Developer Responsibility: • Responsible for Teradata Relationship Management (TRM) automation testing. • Develop and maintain the test automation framework. • Develop and sustain automated testing including Web Service…...
2024/4/21 9:36:50 - Data URI scheme
什么是Data URI Schemedata URI scheme 允许我们使用内联(inline-code)的方式在网页中包含数据,目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入。常用于将图片嵌入网页。HTML中网页图片一般是https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/…...
2024/5/2 7:11:00 - TERADATA:Teradata中操作JSON数据
##示例字段 JSON_TEXT ,格式化后数据:{"SurveyResult":[{"SurveyObjType":"0","Score":"10"},{"SurveyObjType":"2","Score":"10"}],"SurveyReqID":"20191113XXX…...
2024/4/21 9:36:50 - teradata安装
一,下载 步骤1 - 从链接下载所需的VM版本,http://downloads.teradata.com/download/database/teradata-express-for-vmware-player 步骤2 - 提取文件并指定目标文件夹。使用7z 解压下载的压缩文件到指定目录 步骤3 - 从链接https://my.vmware.com/web/vmware/downloads下载VM…...
2024/4/21 9:36:48 - 面试题 学校
1. super()与 this()的区别?This():当前类的对象,super 父类对象。Super():在子类访问父类的成员和行为,必须受类继承规则的约束而 this 他代表当前对象,当然所有的资源都可以访问.在构造函数中,如果第一行没有写 super(),编译器会自动插入.但是如果父类没有不带参数的构…...
2024/5/2 0:56:40 - Teradata日期操作
常用函数CURRENT_DATE, EXTRACT ,ADD_MONTHS ,TRUNC ,CAST ,MOD ,ABS,TYPE,LAST_DAY,TO_CHAR 时间类型DATE --日期类型 2019-10-31 TIME --时间类型 23:11:00 TIMESTAMP --时间戳 2019-10-31 23:11:00.000000日期函数 CURRENT_DATE --返回当前日期 (2019/11/1) CURRENT_TIME -…...
2024/4/21 9:36:45 - 做了40多年数据分析,Teradata这次的关键字是“任意”?
如果一家企业经历了信息化时代、互联网时代到数字化时代的变迁,那么这家企业很可能被打上“传统”的标签,如果这家企业几十年一直在做一件事情,那么被贴标签的概率就可能翻倍。越是几十年专注某一领域的大企业,其努力和创新越容易被忽略,就好比当Teradata天睿公司连续16年…...
2024/4/21 9:36:44 - k8s-学习总结(控制器:RS\Deploy\DS\Job\CJ)
文章目录官网概念Replica Setspec字段参数RS控制器实践一个简单的RS实例扩展副本RS与标签的关系修改已有pod标签,删除所有pod,查看现象Deploymentspec字段参数Deployment模式Deployment控制器实践一个简单实例通过yaml文件方式管理拉伸更新,回滚通过命令方式拉伸、升级、回滚…...
2024/4/21 9:36:43 - 大整数相乘------java实现
大数相乘算法实现:(Java版,使用BigInteger)(含有大数的加、减、乘、除)package com.bigInteger;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.math.BigInteger;/***************************************…...
2024/5/6 20:37:31 - Teradata动态数据仓库电信企业应用
SmarTone-Vodafone是香港第一家利用Teradata动态数据仓库的实时功能提供动态企业智能,使企业所有管理人员可以根据信息轻松制定最佳决策的电信服务提供商。 Teradata专业服务团队为SmarTone-Vodafone部署的解决方案基于Teradata动态企业级数据仓库平台,采用Teradata海量并行处…...
2024/4/21 9:36:41 - 使用kubeadm安装Kubernetes
使用kubeadm安装Kubernetes环境准备基础配置安装Docker关闭防火墙关闭SELinux关闭swap配置转发参数配置Kubernetes阿里云源安装Kubernetes相关组件加载IPVS内核安装Master节点执行kubeadm init 失败手动下载镜像执行kubeadm init配置网络安装Node节点下载镜像添加Node节点FAQ执…...
2024/4/20 18:07:57 - Teradata数据库中的求字段值的长度函数(即对应SQL中的Length()函数)
公司的新项目用的是Teradata数据库,之前从未用过这个,所以也是边做边学。今天在查数据时,想查一个字段的长度,遂习惯性的写下:select length(field_value) from CDM_OPS.CDM2_SETUP_STAGE where setup_list_name = keyAccount但是运行该语句时,系统一直提示有错误,感到很…...
2024/4/20 18:07:55 - 自定义控件
1.自定义view继承自View完全实现自定义控件是最为自由的一种实现,也是相对来说比较复杂的一种。因为你通常需要正确地测量View的尺寸,并且需要手动绘制各种视觉效果,因此,它的工作量相对来说比较大,但是,能够自由地控制整个View的实现。下面我们就继承View来实现一个简单…...
2024/4/20 18:07:56 - SQL语句笔记之Teradata
参考来源: http://www.info.teradata.com/htmlpubs/db_ttu_13_10/index.html#page/SQL_Reference/B035_1146_109A/ch01.3.095.html http://www.teradatawiki.net/2013/10/Teradata-SAMPLE-Function.html1.熟悉数据库中的数据 /* You use different commands to do this in Ter…...
2024/4/19 20:41:57 - 2019年春季第九周 编程总结
一、作业头内容 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 C语言作业评价标准 我在这个课程的目标是 掌握结构指针的操作,并应用于函数传递。 这个作业在那个具体方面帮助我实现目标 在对结构定义与逻辑设计中,能够使用结构变量与结构数组进行编程。 参考文献…...
2024/4/21 9:36:40 - Teradata上新Vantage Customer Experience和Vantage Analyst,都是啥?
通过新的客户数据平台和简化的高级分析为业务分析师提供云端Vantage产品近日Teradata天睿公司宣布推出Vantage CX(Vantage Customer Experience)解决方案,以改变世界上最具创新性的数据驱动型公司的客户体验。Vantage CX可以帮助品牌在所有互动中实时提供相关的个性化体验,…...
2024/4/21 9:36:39 - 二叉树的遍历问题-----Java实现(中序、前序、后序、遍历)
二叉树又称为二叉查找树。 特点:1)LeftChid(data)<Root(data),左子树的值<根的值;2)RightChild(data)>Root(data),右子树的值>根的值;3)左右子树仍然是二叉树 首先,创建一个二叉树结点的类:class Node{public int data;public Node left,right;public Nod…...
2024/4/21 9:36:41 - MySQL查询优化利刃-EXPLAIN
有一个 ? 遇到这样一个疑问:当where中In一个索引字段,那么在查询中还会使用到索引吗? SELECT * FROM table_name WHERE column_index in (expr) 上面的sql语句检索会使用到索引吗?带着这个问题,在网上查找了很多文章,但是有的说 in 会导致放弃索引,全表扫描;有的说Mys…...
2024/4/21 9:36:37 - 2019年春季第八周 编程总结
一、作业头内容 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 C语言作业评价标准字符串函数strlen的深入研究 我在这个课程的目标是 学习与掌握常用字符串函数以及使用指针操作字符串的方法,学习关于字符串的字符数组与字符指针,掌握动态内存分配。 这个作业在那…...
2024/4/21 9:36:36 - Spring学习笔记之使用对象-关系映射持久化数据
ORM(object-relational mapping)——对象/关系 映射。 Spring对多个ORM框架提供了支持。下面分别介绍Spring对Hibernate和JPA(Java持久化API,java Persistence API)的支持。 maven:<dependency><groupId>org.springframework</groupId><artifactId&g…...
2024/4/21 9:36:36
最新文章
- 基于TL431和CSA的恒压与负压输出
Hello uu们,51去那里玩了呀?该收心回来上班了,嘿嘿! 为什么会有这个命题,因为我的手头只有这些东西如何去实现呢?让我们一起来看电路图吧.电路图如下图1所示 图1:CSA恒压输出电路 图1中,R1给U2提供偏置,Q1给R1提供电流,当U1-VOUT输出大于2.5V时候,U2内部的三极管CE导通,使得…...
2024/5/6 23:26:05 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/5/6 9:38:23 - javaWeb网上零食销售系统
1 绪 论 目前,我国的网民数量已经达到7.31亿人,随着互联网购物和互联网支付的普及,使得人类的经济活动进入了一个崭新的时代。淘宝,京东等网络消费平台功能的日益完善,使得人们足不出户就可以得到自己想要的东西。如今…...
2024/5/5 8:40:41 - 从头开发一个RISC-V的操作系统(二)RISC-V 指令集架构介绍
文章目录 前提ISA的基本介绍ISA是什么CISC vs RISCISA的宽度 RISC-V指令集RISC-V ISA的命名规范模块化的ISA通用寄存器Hart特权级别内存管理与保护异常和中断 目标:通过这一个系列课程的学习,开发出一个简易的在RISC-V指令集架构上运行的操作系统。 前提…...
2024/5/5 1:33:57 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/4 23:54:56 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/4 23:54:56 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/5/4 23:54:56 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/6 9:21:00 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/5/4 23:54:56 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/5/4 23:55:05 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/5/4 23:54:56 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/5/4 23:55:16 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/5/4 23:54:56 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/6 1:40:42 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/5/4 23:54:56 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/5/4 23:55:17 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/5/4 23:55:06 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/5/4 23:54:56 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/4 23:55:06 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/5 8:13:33 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/5/4 23:55:16 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/5/4 23:54:58 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/6 21:42:42 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/5/4 23:54:56 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57