专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

RSAAES对前后端数据进行加密

  前言
  在前后端交互时,常常采取http方式进行传输,而明文传输通常会被网络抓包、反编译等手段得到htpp通讯接地址和参数等。
  为了确保信息的安全,在生产中使用了很多种加密手段。最终采用AESRSA组合进行接口参数加密和解密的方式脱颖而出,成为了当今主流手段。为什么使用RSAAES混合加密1。加密介绍RSA加密:属于非对称加密,公钥用于对数据进行加密,私钥对数据进行解密,两者不可逆。公钥和私钥是同时生成的,且一一对应。比如:客户端拥有公钥,服务端拥有公钥和私钥。客户端将数据通过公钥进行加密后,发送密文给服务端,服务端可以通过私钥和公钥进行解密。AES加密:属于对称加密,简单点说就是,客户端用密码对数据进行AES加密后,服务端用同样的密码对密文进行AES解密。2。加密思路利用RSA来加密传输AES的密钥,用AES的密钥来加密数据。既利用了RSA的灵活性,可以随时改动AES的密钥;又利用了AES的高效性,可以高效传输数据。3。混合加密原因单纯的使用RSA(非对称加密)方式,效率会很低,因为非对称加密解密方式虽然很保险,但是过程复杂,耗费时间长,性能不高;RSA优势在于数据传输安全,且对于几个字节的数据,加密和解密时间基本可以忽略,所以用它非常适合加密AES秘钥(一般16个字节);单纯的使用AES(对称加密)方式的话,非常不安全。这种方式使用的密钥是一个固定的密钥,客户端和服务端是一样的,一旦密钥被人获取,那么,我们所发的每一条数据都会被都对方破解;AES有个很大的优点,那就是加密解密效率很高,而我们传输正文数据时,正好需要这种加解密效率高的,所以这种方式适合用于传输量大的数据内容;基于以上特点,就有了我们混合加密的思路时序图
  代码实现RAS非对称加密javaAES加密packagecom。fandf。demo。encrypt;importorg。apache。commons。codec。binary。Base64;importorg。slf4j。Logger;importorg。slf4j。LoggerFactory;importjavax。crypto。Cipher;importjavax。crypto。KeyGenerator;importjavax。crypto。SecretKey;importjavax。crypto。spec。SecretKeySpec;功能:AES工具类SuppressWarnings(all)publicclassAESUtil{privatestaticfinalLoggerloggerLoggerFactory。getLogger(AESUtil。class);publicfinalstaticStringKEYALGORITHMSAES;publicfinalstaticintKEYSIZE128;生成AES密钥,base64编码格式(128)returnthrowsExceptionpublicstaticStringgetKeyAES128()throwsException{KeyGeneratorkeyGenKeyGenerator。getInstance(KEYALGORITHMS);keyGen。init(KEYSIZE);SecretKeykeykeyGen。generateKey();Stringbase64strBase64。encodeBase64String(key。getEncoded());returnbase64str;}生成AES密钥,base64编码格式(256)returnthrowsExceptionpublicstaticStringgetKeyAES256()throwsException{256需要换jar包暂时用128Stringbase64strgetKeyAES128();returnbase64str;}根据base64Key获取SecretKey对象parambase64KeyreturnpublicstaticSecretKeyloadKeyAES(Stringbase64Key){byte〔〕bytesBase64。decodeBase64(base64Key);SecretKeySpecsecretKeySpecnewSecretKeySpec(bytes,KEYALGORITHMS);returnsecretKeySpec;}AES加密字符串,SecretKey对象paramkeyparamencryptDataparamencodereturnpublicstaticStringencrypt(SecretKeykey,StringencryptData,Stringencode){try{finalCiphercipherCipher。getInstance(KEYALGORITHMS);cipher。init(Cipher。ENCRYPTMODE,key);byte〔〕encryptBytesencryptData。getBytes(encode);byte〔〕resultcipher。doFinal(encryptBytes);returnBase64。encodeBase64String(result);}catch(Exceptione){logger。error(加密异常:e。getMessage());returnnull;}}AES加密字符串,base64Key对象parambase64KeyparamencryptDataparamencodereturnpublicstaticStringencrypt(Stringbase64Key,StringencryptData,Stringencode){SecretKeykeyloadKeyAES(base64Key);try{finalCiphercipherCipher。getInstance(KEYALGORITHMS);cipher。init(Cipher。ENCRYPTMODE,key);byte〔〕encryptBytesencryptData。getBytes(encode);byte〔〕resultcipher。doFinal(encryptBytes);returnBase64。encodeBase64String(result);}catch(Exceptione){logger。error(加密异常:e。getMessage());returnnull;}}AES解密字符串,SecretKey对象paramkeyparamdecryptDataparamencodereturnpublicstaticStringdecrypt(SecretKeykey,StringdecryptData,Stringencode){try{finalCiphercipherCipher。getInstance(KEYALGORITHMS);cipher。init(Cipher。DECRYPTMODE,key);byte〔〕decryptBytesBase64。decodeBase64(decryptData);byte〔〕resultcipher。doFinal(decryptBytes);returnnewString(result,encode);}catch(Exceptione){logger。error(加密异常:e。getMessage());returnnull;}}AES解密字符串,base64Key对象parambase64KeyparamdecryptDataparamencodereturnpublicstaticStringdecrypt(Stringbase64Key,StringdecryptData,Stringencode){SecretKeykeyloadKeyAES(base64Key);try{finalCiphercipherCipher。getInstance(KEYALGORITHMS);cipher。init(Cipher。DECRYPTMODE,key);byte〔〕decryptBytesBase64。decodeBase64(decryptData);byte〔〕resultcipher。doFinal(decryptBytes);returnnewString(result,encode);}catch(Exceptione){logger。error(加密异常:e。getMessage());returnnull;}}}复制代码RSA加解密packagecom。fandf。demo。encrypt;importjava。nio。charset。StandardCharsets;importjava。security。Key;importjava。security。KeyFactory;importjava。security。KeyPair;importjava。security。KeyPairGenerator;importjava。security。PrivateKey;importjava。security。PublicKey;importjava。security。SecureRandom;importjava。security。Signature;importjava。security。interfaces。RSAPrivateKey;importjava。security。interfaces。RSAPublicKey;importjava。security。spec。PKCS8EncodedKeySpec;importjava。security。spec。X509EncodedKeySpec;importjava。util。HashMap;importjava。util。Map;importjavax。crypto。Cipher;importcom。alibaba。fastjson。JSON;importorg。apache。commons。codec。binary。Base64;importorg。apache。commons。lang3。ArrayUtils;importorg。slf4j。Logger;importorg。slf4j。LoggerFactory;SHA256withRSA工具类SuppressWarnings(all)publicclassRSAUtil{privatestaticfinalLoggerloggerLoggerFactory。getLogger(RSAUtil。class);MAXDECRYPTBLOCK应等于密钥长度8(1byte8bit),所以当密钥位数为2048时,最大解密长度应为256。128对应1024,256对应2048privatestaticfinalintKEYSIZE2048;RSA最大加密明文大小privatestaticfinalintMAXENCRYPTBLOCK117;RSA最大解密密文大小privatestaticfinalintMAXDECRYPTBLOCK128;不仅可以使用DSA算法,同样也可以使用RSA算法做数字签名privatestaticfinalStringKEYALGORITHMRSA;privatestaticfinalStringSIGNATUREALGORITHMSHA256withRSA;默认种子publicstaticfinalStringDEFAULTSEED()(ED47d784sde78;编码格式privatestaticfinalStringCODEFORMATEUTF8UTF8;RSA生成秘钥对生成密钥对:Base64转码的字符串paramkeyreturnpublicstaticMapString,StringinitKeyBase64Str()throwsException{MapString,StringmapnewHashMap(2);MapString,KeykeyMapinitKey();PublicKeypublicKey(PublicKey)keyMap。get(PublicKey);PrivateKeyprivateKey(PrivateKey)keyMap。get(PrivateKey);map。put(PublicKey,newString(Base64。encodeBase64(publicKey。getEncoded())));map。put(PrivateKey,newString(Base64。encodeBase64(privateKey。getEncoded())));logger。info(生成密钥JSON。toJSONString(map));returnmap;}生成默认密钥return密钥对象publicstaticMapString,KeyinitKey()throwsException{returninitKey(DEFAULTSEED);}生成密钥对:若seed为null,那么结果是随机的;若seed不为null且固定,那么结果也是固定的;paramseed种子return密钥对象publicstaticMapString,KeyinitKey(Stringseed)throwsException{KeyPairGeneratorkeygenKeyPairGenerator。getInstance(KEYALGORITHM);如果指定seed,那么secureRandom结果是一样的,所以生成的公私钥也永远不会变SecureRandomsecureRandomnewSecureRandom();secureRandom。setSeed(seed。getBytes());Modulussizemustrangefrom512to1024andbeamultipleof64keygen。initialize(KEYSIZE,secureRandom);生成一个密钥对,保存在keyPair中KeyPairkeyskeygen。genKeyPair();PublicKeypublicKeykeys。getPublic();PrivateKeyprivateKeykeys。getPrivate();将公钥和私钥保存到MapMapString,KeymapnewHashMap(2);map。put(PublicKey,publicKey);map。put(PrivateKey,privateKey);logger。info(生成密钥JSON。toJSONString(map));returnmap;}RSA加密、解密获取公钥PublicKey信息param公钥returnpublicstaticPublicKeygetPublicKey(StringpubKeyStr)throwsException{byte〔〕publicKeysBase64。decodeBase64(pubKeyStr);X509EncodedKeySpecpublicKeySpecnewX509EncodedKeySpec(publicKeys);KeyFactorymykeyFactoryKeyFactory。getInstance(KEYALGORITHM);PublicKeypublicKeymykeyFactory。generatePublic(publicKeySpec);logger。info(传入的公钥为:【pubKeyStr】,转义后的公钥为:【publicKey】);returnpublicKey;}公钥加密,指定RSA方式的PublicKey对象paramstr加密字符串parampublicKey公钥returnpublicstaticStringencrypt(Stringstr,StringpublicKey)throwsException{base64编码的公钥byte〔〕decodedBase64。decodeBase64(publicKey);RSAPublicKeypubKey(RSAPublicKey)KeyFactory。getInstance(KEYALGORITHM)。generatePublic(newX509EncodedKeySpec(decoded));RSA加密CiphercipherCipher。getInstance(KEYALGORITHM);cipher。init(Cipher。ENCRYPTMODE,pubKey);StringoutStrBase64。encodeBase64String(cipher。doFinal(str。getBytes(CODEFORMATEUTF8)));returnoutStr;}公钥加密,任意PublicKey对象parampublicKeyparamencryptDataparamencodepublicstaticStringencrypt(PublicKeypublicKey,StringencryptData,Stringencode)throwsException{if(publicKeynull){thrownewException(加密公钥为空,请设置。);}try{finalCiphercipherCipher。getInstance(KEYALGORITHM);cipher。init(Cipher。ENCRYPTMODE,publicKey);byte〔〕outputcipher。doFinal(encryptData。getBytes(encode));returnBase64。encodeBase64String(output);}catch(Exceptione){logger。info(加密异常:e。getMessage());returnnull;}}私钥解密,指定RSA方式的PrivateKey对象paramstr加密字符串paramprivateKey私钥returnpublicstaticStringdecrypt(Stringstr,StringprivateKey)throwsException{64位解码加密后的字符串byte〔〕inputByteBase64。decodeBase64(str。getBytes(CODEFORMATEUTF8));base64编码的私钥byte〔〕decodedBase64。decodeBase64(privateKey);RSAPrivateKeypriKey(RSAPrivateKey)KeyFactory。getInstance(KEYALGORITHM)。generatePrivate(newPKCS8EncodedKeySpec(decoded));RSA解密CiphercipherCipher。getInstance(KEYALGORITHM);cipher。init(Cipher。DECRYPTMODE,priKey);StringoutStrnewString(cipher。doFinal(inputByte));returnoutStr;}RSA公钥加密,【限制长度】paramstr加密字符串parampublicKey公钥return密文publicstaticStringencryptByPublicKey(Stringstr,StringpublicKey)throwsException{base64编码的公钥byte〔〕keyBytesdecryptBASE64(publicKey);RSAPublicKeypubKey(RSAPublicKey)KeyFactory。getInstance(KEYALGORITHM)。generatePublic(newX509EncodedKeySpec(keyBytes));RSA加密CiphercipherCipher。getInstance(KEYALGORITHM);cipher。init(Cipher。ENCRYPTMODE,pubKey);byte〔〕datastr。getBytes(UTF8);加密时超过117字节就报错。为此采用分段加密的办法来加密byte〔〕enBytesnull;for(inti0;idata。length;iMAXENCRYPTBLOCK){注意要使用2的倍数,否则会出现加密后的内容再解密时为乱码byte〔〕doFinalcipher。doFinal(ArrayUtils。subarray(data,i,iMAXENCRYPTBLOCK));enBytesArrayUtils。addAll(enBytes,doFinal);}StringoutStrencryptBASE64(enBytes);returnoutStr;}RSA私钥解密,【限制长度】paramencryStr加密字符串paramprivateKey私钥return明文publicstaticStringdecryptByPrivateKey(StringencryStr,StringprivateKey)throwsException{base64编码的私钥byte〔〕decodeddecryptBASE64(privateKey);RSAPrivateKeypriKey(RSAPrivateKey)KeyFactory。getInstance(KEYALGORITHM)。generatePrivate(newPKCS8EncodedKeySpec(decoded));RSA解密CiphercipherCipher。getInstance(KEYALGORITHM);cipher。init(Cipher。DECRYPTMODE,priKey);64位解码加密后的字符串byte〔〕datadecryptBASE64(encryStr);解密时超过128字节报错。为此采用分段解密的办法来解密StringBuildersbnewStringBuilder();for(inti0;idata。length;iMAXDECRYPTBLOCK){byte〔〕doFinalcipher。doFinal(ArrayUtils。subarray(data,i,iMAXDECRYPTBLOCK));sb。append(newString(doFinal));}returnsb。toString();}BASE64Encoder加密paramdata要加密的数据return加密后的字符串privatestaticStringencryptBASE64(byte〔〕data){returnnewString(Base64。encodeBase64(data));}BASE64Encoder解密paramdata要解密的数据return解密后的字节privatestaticbyte〔〕decryptBASE64(Stringdata){returnBase64。decodeBase64(data);}SIGN签名,验签加签:生成报文签名paramcontent报文内容paramprivateKey私钥paramencode编码returnpublicstaticStringdoSign(Stringcontent,StringprivateKey,Stringencode){try{StringunsignBase64。encodeBase64String(content。getBytes(StandardCharsets。UTF8));byte〔〕privateKeysBase64。decodeBase64(privateKey。getBytes());PKCS8EncodedKeySpecprivateKeySpecnewPKCS8EncodedKeySpec(privateKeys);KeyFactorymykeyFactoryKeyFactory。getInstance(KEYALGORITHM);PrivateKeypsbcPrivateKeymykeyFactory。generatePrivate(privateKeySpec);SignaturesignatureSignature。getInstance(SIGNATUREALGORITHM);signature。initSign(psbcPrivateKey);signature。update(unsign。getBytes(encode));byte〔〕signedsignature。sign();returnBase64。encodeBase64String(signed);}catch(Exceptione){logger。error(生成报文签名出现异常);}returnnull;}验证:验证签名信息paramcontent签名报文paramsigned签名信息parampublicKey公钥paramencode编码格式returnpublicstaticbooleandoCheck(Stringcontent,Stringsigned,PublicKeypublicKey,Stringencode){try{解密之前先把content明文,进行base64转码StringunsignedBase64。encodeBase64String(content。getBytes(encode));SignaturesignatureSignature。getInstance(SIGNATUREALGORITHM);signature。initVerify(publicKey);signature。update(unsigned。getBytes(encode));booleanbverifysignature。verify(Base64。decodeBase64(signed));returnbverify;}catch(Exceptione){logger。error(报文验证签名出现异常);}returnfalse;}}复制代码测试类packagecom。fandf。demo。encrypt;importorg。apache。commons。codec。binary。Base64;importjavax。crypto。KeyGenerator;importjavax。crypto。SecretKey;importjava。security。KeyPair;importjava。security。KeyPairGenerator;importjava。security。NoSuchAlgorithmException;importjava。security。SecureRandom;importjava。security。interfaces。RSAPrivateKey;importjava。security。interfaces。RSAPublicKey;importjava。util。HashMap;importjava。util。Map;authorfandongfengpublicclassTest{publicstaticvoidmain(String〔〕args){StringsendMesg天王盖地虎,小鸡炖蘑菇;System。out。println(需要加密传输的数据(sendMesg)为:sendMesg);用于封装RSA随机产生的公钥与私钥MapInteger,StringkeyMapnewHashMapInteger,String();AES:随机生成加密秘钥KeyGeneratorkeyGennull;try{keyGenKeyGenerator。getInstance(AES);keyGen。init(128);}catch(NoSuchAlgorithmExceptione){e。printStackTrace();}SecretKeykeykeyGen。generateKey();StringAESKeyStrBase64。encodeBase64String(key。getEncoded());System。out。println(随机生成的AES加密秘钥(AESKeyStr)为:AESKeyStr);RSA:生成公钥和私钥KeyPairGeneratorkeyPairGennull;try{keyPairGenKeyPairGenerator。getInstance(RSA);}catch(NoSuchAlgorithmExceptione){e。printStackTrace();}初始化密钥对生成器,指定位数,不指定种子keyPairGen。initialize(2048,newSecureRandom());生成一个密钥对,保存在keyPair中KeyPairkeyPairkeyPairGen。generateKeyPair();得到RSA私钥RSAPrivateKeyprivateKey(RSAPrivateKey)keyPair。getPrivate();得到RSA公钥RSAPublicKeypublicKey(RSAPublicKey)keyPair。getPublic();得到公钥字符串StringpublicKeyStrnewString(Base64。encodeBase64(publicKey。getEncoded()));System。out。println(随机生成的公钥(publicKey)为:publicKeyStr);得到私钥字符串StringprivateKeyStrnewString(Base64。encodeBase64((privateKey。getEncoded())));System。out。println(随机生成的私钥(privateKey)为:privateKeyStr);1。客户端:AES秘钥key加密数据StringencryptDataAESUtil。encrypt(AESKeyStr,sendMesg,UTF8);System。out。println(AES秘钥key加密后的字符串为:encryptData);2。客户端:RSA公钥加密AES秘钥key(keyEn)StringencryptKeynull;try{encryptKeyRSAUtil。encrypt(AESKeyStr,publicKeyStr);System。out。println(RSA加密后的AES秘钥key为:encryptKey);}catch(Exceptione){e。printStackTrace();}System。out。println(客户端将AES秘钥key加密后的数据和RSA加密后的AES秘钥发送给服务端);System。out。println(服务端收到数据,开始工作);3。服务端:RSA私钥解密AES秘钥key(keyEn)Stringaeskeynull;try{aeskeyRSAUtil。decrypt(encryptKey,privateKeyStr);System。out。println(服务端,RSA解密后的AES秘钥key为:aeskey);}catch(Exceptione){e。printStackTrace();}4。服务端:AES秘钥key解密数据StringdataAESUtil。decrypt(aeskey,encryptData,UTF8);System。out。println(服务端,AES秘钥key解密后的字符串为:data);}}打印输出结果需要加密传输的数据(sendMesg)为:天王盖地虎,小鸡炖蘑菇随机生成的AES加密秘钥(AESKeyStr)为:8SPp19W8gsZ6jpP8r89cg随机生成的公钥(publicKey)为:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoRgrQGG0MwxebDpHLhGhcdBM1HS0Z8DYE8zXsU9Y0IWPou2ht3qYSoJPJWDDoGvjRdtjb7HyPijEpquWYocbufG7gfhn0BWrjmR08TgS3FfmIRHkGAlNKcZmEqe670SjMlkMIlILye7dT3jdjcP1kkf9IRfAtfBC7Pk40KXG3zwBGe8EgT3xEEPM551A6K1KYO9Ocgvb5NI1xBwMKNIu6hZ9dqJHMlbKMtwh7S74LrhROMSnZkX5pvyHmRhWjn7i14nTKWealhYmIHAVpz7InEGnEPqHjWUTFAM1F9N4gaJs8TIObSfeF2BtStcFBNssCgyQIDAQAB随机生成的私钥(privateKey)为:MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQChGCtAYbQzDF5sOkcuEaFx0EzUdLRn7wNgTzNexT1jQhYi7aG3ephKgk8lYMOgaP5F362NvsfIKMSmq5Zihxu58buBGfQFauP6ZHTxOBLcVYhEeQYCU0pxmYSp7rvRKMyWQwiUgvJ7t1PeN2NwWSR0hF8C18ELs6TjQpcbfPAEZ7wTBPfEQQ8znnX8DorUpg705yC9vk0jXEHAwo0j67qFn12okcyVsoy3CHtLvgvuH5E4xKdnRfmmIeZGFaOfuLXidMpb95qX6FiYgcD5WnPsicQacQ6oeNZRMUAzUX03iBomzxMg5tJ94XYG35K39wUE2ywKDL5AgMBAAECggEBAIVE4lsjuRjWLbMpT0OMcFwgr76QZQOBmQBgYTwdYWM4awilwDhy4lQZk3Jfp9cqCnJCfqAtwfgUDtJyqfHw0pqsVcdvvhzbg2hTTMTMi9wbSHUbKgA2vjHgPmTwE1448X4E7BnikyaPBIfKvHWLp0F89JYN6ksNeTCTrZjsY2OwrvCurcLYPZncVXJxk3cp09kd66MFtmeoAWKrv5IyheqAV9j62md3fRBJRyMEnmawje0HaP0k5AiyuAOedunolcA5EUyT5Drunnb2xLdhFBheMRflL2bEMzkOK3rdCMvdJlpqeojrohiyWi6iiC3KmzBnbiLNH6m0MSS89ECgYEA10CEYlIMyMUi2cIPi6s116lDHyj9P4G93uqaL5TGLJrKy5aQyIuR1h4TnpjsKYUgiR4vb1N86uSHt8tAC45U3laVkvmEgZAWJT9GoSWzuyDtAfzETbzkAQuWFWM7VDW5Utj0YUu1OOZGowj47zBk8shWdlcbfIUspaGxL0CgYEAv5cUuWlJFhHHpO8cTEgTZAucin9vbR6fyuqiaqd7j5JEsFqKVNlpyDrH7vBfA8vtQrGSq8dvS8LAgqOUMrRVPkYO1DgO0a6wHahat8DxLvcTDjAV1XauWwLiX3QWSEkkyofA2Uf5WmapNhrnAAxmAxUoKvomOhdCdUO0CgYAXl5Oq7xFFpA24zkND7KTGScpMCXpov7gf0aPUkiGa9Z0gvWX6gfG7w75cAtaVaQGQ0xpPXpDNkvNNC1M4lrwROtwzlZtgAnXvMP0IENfoNbl2ewmYZn8uwlNfYYImZ7RTMQkMdcQAHVBGsEIQfT5jOb4Qn3ZvQL8eGUXBQKBgQCNvlLA0doWj9Tqe1SuQuzFqamI9ccmLK4sA7xJ2Ya6Si55x9nTH2lScsvLf3ZEtDY2DiSjRl8KTJ4FHksAlUUJkKireYur8KW8uytJG7pX7QBY9x631bzlA0WStg27YpmtGaZyFGu7wbWEPnDY6ffa0zVnwN2uFcrxyWN6CQKBgQCDN3m0JB0TjSCPRrBkiyiHACvmFRQW2z5YzOJpJI839XdEDX0AHWbGLkgNmrfJfptSOuxQSzreQNMcHNexvvfLnYwstKuIc16w8hR9D0payxosh78vLDihbql5RMEhyUUhnyU24llqR6nChSTFDPFJXaaDgtUGJ0EF7agAES秘钥key加密后的字符串为:e7xA6cCYjSgaYq5LyCIdwghUyLocH7hvaHuR3T6laIkf45LXF80Ectj6YSXrOdRSA加密后的AES秘钥key为:BLFFlz5CoNKOCUfOK9BD6b7fY8jHkm97gRv34kCjiPyPW1bY6p2pWB3H1h37O2vUyrXlfOUuNQUKZomjnng4ggmkCmZ49gdDRkSo3DycXy4tU16r3hTWIoXQxtE9oKOy7QO6aIvYT6jjnq6ULzCUiZ0mB541GMlkU2WFnIiDIK0T45H2exlv4NJcT7sW9Lmy6L43laWgfSW65ud7ixfP2ST7NfTt6zIGQD1198Pqx1woUg6lK4FY0MXKz9NTUxWJcHoOsaPREQABsHRgyjM2WFIYD34h7TZVSrmCP7XCJoENFpZyaqjahjXLJBbmOfMDHxg00PLA客户端将AES秘钥key加密后的数据和RSA加密后的AES秘钥发送给服务端服务端收到数据,开始工作服务端,RSA解密后的AES秘钥key为:8SPp19W8gsZ6jpP8r89cg服务端,AES秘钥key解密后的字符串为:天王盖地虎,小鸡炖蘑菇复制代码

雷军代表科技赋能带动供应链崛起,实现一家兴百家强北京日报客户端记者张蕾3月5日晚,北京市代表团举行第三场媒体连线采访。不管外部环境和竞争格局如何变化,不管企业的经营策略如何调整,企业科技创新的核心是要坚定持续地加大研发投入。全国小米印度告诉员工没有年终奖小米印度告诉员工没有年终奖印度时报报道,智能手机巨头小米周一一个集会上告诉印度员工,他们将不会有年终奖。我们被告知公司在业务上面临挑战,一位参加集会的员工说。印度人力资源主管Var小明说,自从用了这款插件,整个人都精神了很多每天我们都会打开无数次浏览器,浏览大量网页。但看得最多使用频率最高的,还是浏览器的新标签页。可目前市场上主流的浏览器,包括Chrome和Edge,它们的默认新标签页都很难满足我们的人类移民外星球是否造成影响科学家的答案(星球移居)科学家认为人类移民到外星球,极有可能会给外星球带来影响。尽管人类对移民外星球充满了幻想和希望,可是根据科学家现在的研究,人类想要真正的移民到外星球,是一件并不容易实现的事情。月球移新能源汽车为什么要降价促销就是要打击对手,谁先扛不住成本压力谁先倒下,最后存活下来的达到赢者通吃。至于市场占有,死掉的公司还怎么谈市场占有?还记得多年前外卖行业的补贴大战吗?2014年那时候外卖江湖风起云涌NeurIPS2022SlotCon以对象为中心的自监督表征学习Objectdiscovery旨在无监督地发现图像中的物体,而此前该领域中的工作长期局限于合成数据集。在发表于NeurIPS2022的工作SelfSupervisedVisualRAI福利姬,怎么就成了女性救星?大家好,我是田静。人工智能,正变得越来越全能。有问必答知无不言的ChatGPT,堪比神笔马良的AI作画,不断刷新人们的认知。但谁也没想到,无所不能的AI,开始做起了福利姬。清纯的脸索通发展与北摩高科签署合作协议拟推进新产品开发及应用中证网讯(记者张鹏飞)索通发展3月6日晚间公告,公司与北摩高科3月3日在北京签署合作协议,双方拟共同推进碳碳碳陶复合材料在锂电池负极材料行业以及电解铝行业的应用。公告显示,双方合作开年迄今顶流基金业绩分化,迷你基金包揽主动权益类前三随着权益市场的回暖,以张坤为代表的一众顶流明星基金经理的业绩终于有所回血,经历连续数年的跌跌不休后终于在2023年斩获正向收益。值得关注的是,部分小而美基金反弹力度更甚,无论业绩还重磅调整!金融监管将进行重大改革!党的二十届二中全会通过了党和国家机构改革方案,本次改革中,金融监管将发生重大调整。未来将在目前中国银行保险监督管理委员会的基础上,成立国家金融监督管理总局,并不再保留银保监会。此外凡是以割韭菜为思维导向的提案都不值得关注和实施近期有很多高质量的提案,以促进国家发展,同时倾心关注民生需求,得到了广大网友的好评。但也有一些提案要么是无病呻吟,要么就是旧酒装新瓶,毫无新意,特别是有提案抱着割韭菜的旧有思维,出
版本更新l单小二售后云4。4版本八项功能优化单小二售后云重视客户的不同需求和意见,始终坚持与客户共创。为了帮助客户更加得心应手地使用产品,单小二秉承精益求精的态度,对产品进行不断打磨优化。此次,围绕客户的不同需求,单小二进行摩托罗拉G32推出8128GB版本或将于3月22日上市手机中国新闻去年8月份,摩托罗拉推出了MotoG32。该机4GB64GB版本售价为12999卢比(折合人民币1083元)。现在,这款手机带来了更大的内存版本。摩托罗拉G32推出81特斯拉海外推送2022。45。11版本,优化了FSDBeta多种功能和逻辑IT之家3月20日消息,特斯拉目前已经在北美推2022。45。11车机软件更新。该版本主要是对召回问题进行了修复,而且FSDBeta更新到了v11。3。2版本。相比之前的版本,这次盒子显示器爱奇艺?别急,这个盒子还有更多功能最近就遇到了不少咨询我电视使用问题的,比如几年前买了一款某虹的电视机,当时的系统还没有做成现在的智能系统,界面啊什么的都特别陈旧,而且扩展性不强,在品牌方切断资源这种情况下就不能愉物理外挂再助力!华为P605G功能上线这下没遗憾了?去年底华为高调的选择在苹果iPhone14系列发布的前一天发布了自己最新的旗舰产品Mate50系列。这也是华为遭到打压后发布的首款Mate机型,作为华为一贯的最顶级手机产品,Mat探讨给老人选择手机是功能手机还是智能手机?随着科技的不断发展,手机的功能也越来越多样化。对于老年人来说,选择一款合适的手机非常重要,因为它不仅能够满足他们日常的通信需求,还能提高他们的生活质量。但在选择手机的时候,老年人常不把用户当回事?5G套路被揭开后,工信部已严查降速行为?在阅读此文前,诚邀您点击一下关注,既方便您进行讨论与分享,又给您带来不一样的参与感,感谢您的支持。相信在绝大多数人的心目当中,5G通讯技术都比4G通讯技术更加高级。因此在运营商推出瑞信困境损害了对银行体系的信心在美国银行接连关闭殃及欧洲银行业的背景下,瑞士联邦政府19日宣布,瑞士信贷银行将被瑞银集团收购。专家认为,此次瑞信遭遇困境损害了人们对整个银行体系的信心。德国银行业专家托马斯银行业国网长沙供电公司加快推进分布式光伏发电项目绿色动能助力企业降本增效刊载于湖南日报2023年3月21日09版湖南日报3月20日讯(全媒体记者王晗通讯员邹倩)你们推荐的光伏项目好,不仅能给厂房遮阴防晒,还能提供清洁能源,企业用电成本也将大大降低。近日裁员20,关闭50条产线,宁波知名大厂真要战略性撤退?文文评科技一直以来,在显示面板领域,随着国内如京东方以及TCL华星等公司在技术上取得接连突破,过去在液晶显示领域一直处于王者地位的台湾地区与韩国企业被活活拉下了神坛。凭借着高性价比买了3D电影票,为啥还要另花25元买3D眼镜?电影院不免费提供3D眼镜,让消费者自费购买,消费者质疑这些小问题给消费者带来大烦恼买了3D电影票,为啥还要另花25元买3D眼镜?本报讯(记者窦菲涛)好不容易去看场3D电影,电影院却
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网