趣虎号
  • 首页
  • 文章分类
    • 创业分享
    • 生活百态
  • 专题
  1. 首页 > 文章分类 > 生活百态

rsa在线加解密(rsa加密和解密c语言实现)

作者:小编 • 更新时间:2023-08-17 16:48:00 •阅读

今天给各位分享rsa在线加解密的知识,其中也会对rsa加密和解密c语言实现进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

如何实现用javascript实现rsa加解密

具体实现思路如下:

1。服务端生成公钥与私钥,保存。

2。客户端在请求到登录页面后,随机生成一字符串。

3。后此随机字符串作为密钥加密密码,再用从服务端获取到的公钥加密生成的随机字符串。

4。将此两段密文传入服务并清端,服务端用私钥解出随机字符串,再用此私钥解出加密的密文。

这其中有一个关键是解决服务端的公钥,传入客户端,客户端用此公钥加密字符串后,后又能在服务端用私钥解出。

此文即为实现此步而作。

加密算法为RSA:洞游

1。服务端的RSA java实现。

/**

*

*/

packagecom.sunsoft.struts.util;

importjava.io.ByteArrayOutputStream;

importjava.io.FileInputStream;

importjava.io.FileOutputStream;

importjava.io.ObjectInputStream;

importjava.io.ObjectOutputStream;

importjava.math.BigInteger;

importjava.security.KeyFactory;

importjava.security.KeyPair;

importjava.security.KeyPairGenerator;

importjava.security.NoSuchAlgorithmException;

importjava.security.PrivateKey;

importjava.security.PublicKey;

importjava.security.SecureRandom;

importjava.security.interfaces.RSAPrivateKey;

importjava.security.interfaces.RSAPublicKey;

importjava.security.spec.InvalidKeySpecException;

importjava.security.spec.RSAPrivateKeySpec;

importjava.security.spec.RSAPublicKeySpec;

importjavax.crypto.Cipher;

纳蔽销

/**

*RSA工具类。提供加密,解密,生成密钥对等方法。

*需要到http://www.bouncycastle.org下载bcprov-jdk14-123.jar。

*

*/

publicclassRSAUtil{

/**

**生成密钥对*

*

*@returnKeyPair*

*@throwsEncryptException

*/

publicstaticKeyPairgenerateKeyPair()throwsException{

try{

KeyPairGeneratorkeyPairGen=KeyPairGenerator.getInstance("RSA",

neworg.bouncycastle.jce.provider.BouncyCastleProvider());

finalintKEY_SIZE=1024;//没什么好说的了,这个值关系到块加密的大小,可以更改,但是不要太大,否则效率会低

keyPairGen.initialize(KEY_SIZE,newSecureRandom());

KeyPairkeyPair=keyPairGen.generateKeyPair();

saveKeyPair(keyPair);

returnkeyPair;

}catch(Exceptione){

thrownewException(e.getMessage());

}

}

publicstaticKeyPairgetKeyPair()throwsException{

FileInputStreamfis=newFileInputStream("C:/RSAKey.txt");

ObjectInputStreamoos=newObjectInputStream(fis);

KeyPairkp=(KeyPair)oos.readObject();

oos.close();

fis.close();

returnkp;

}

publicstaticvoidsaveKeyPair(KeyPairkp)throwsException{

FileOutputStreamfos=newFileOutputStream("C:/RSAKey.txt");

ObjectOutputStreamoos=newObjectOutputStream(fos);

//生成密钥

oos.writeObject(kp);

oos.close();

fos.close();

}

/**

**生成公钥*

*

*@parammodulus*

*@parampublicExponent*

*@returnRSAPublicKey*

*@throwsException

*/

publicstaticRSAPublicKeygenerateRSAPublicKey(byte[]modulus,

byte[]publicExponent)throwsException{

KeyFactorykeyFac=null;

try{

keyFac=KeyFactory.getInstance("RSA",

neworg.bouncycastle.jce.provider.BouncyCastleProvider());

}catch(NoSuchAlgorithmExceptionex){

thrownewException(ex.getMessage());

}

RSAPublicKeySpecpubKeySpec=newRSAPublicKeySpec(newBigInteger(

modulus),newBigInteger(publicExponent));

try{

return(RSAPublicKey)keyFac.generatePublic(pubKeySpec);

}catch(InvalidKeySpecExceptionex){

thrownewException(ex.getMessage());

}

}

/**

**生成私钥*

*

*@parammodulus*

*@paramprivateExponent*

*@returnRSAPrivateKey*

*@throwsException

*/

publicstaticRSAPrivateKeygenerateRSAPrivateKey(byte[]modulus,

byte[]privateExponent)throwsException{

KeyFactorykeyFac=null;

try{

keyFac=KeyFactory.getInstance("RSA",

neworg.bouncycastle.jce.provider.BouncyCastleProvider());

}catch(NoSuchAlgorithmExceptionex){

thrownewException(ex.getMessage());

}

RSAPrivateKeySpecpriKeySpec=newRSAPrivateKeySpec(newBigInteger(

modulus),newBigInteger(privateExponent));

try{

return(RSAPrivateKey)keyFac.generatePrivate(priKeySpec);

}catch(InvalidKeySpecExceptionex){

thrownewException(ex.getMessage());

}

}

/**

**加密*

*

*@paramkey

*加密的密钥*

*@paramdata

*待加密的明文数据*

*@return加密后的数据*

*@throwsException

*/

publicstaticbyte[]encrypt(PublicKeypk,byte[]data)throwsException{

try{

Ciphercipher=Cipher.getInstance("RSA",

neworg.bouncycastle.jce.provider.BouncyCastleProvider());

cipher.init(Cipher.ENCRYPT_MODE,pk);

intblockSize=cipher.getBlockSize();//获得加密块大小,如:加密前数据为128个byte,而key_size=1024

//加密块大小为127

//byte,加密后为128个byte;因此共有2个加密块,第一个127

//byte第二个为1个byte

intoutputSize=cipher.getOutputSize(data.length);//获得加密块加密后块大小

intleavedSize=data.length%blockSize;

intblocksSize=leavedSize!=0?data.length/blockSize+1

:data.length/blockSize;

byte[]raw=newbyte[outputSize*blocksSize];

inti=0;

while(data.length-i*blockSize>0){

if(data.length-i*blockSize>blockSize)

cipher.doFinal(data,i*blockSize,blockSize,raw,i

*outputSize);

else

cipher.doFinal(data,i*blockSize,data.length-i

*blockSize,raw,i*outputSize);

//这里面doUpdate方法不可用,查看源代码后发现每次doUpdate后并没有什么实际动作除了把byte[]放到

//ByteArrayOutputStream中,而最后doFinal的时候才将所有的byte[]进行加密,可是到了此时加密块大小很可能已经超出了

//OutputSize所以只好用dofinal方法。

i++;

}

returnraw;

}catch(Exceptione){

thrownewException(e.getMessage());

}

}

/**

**解密*

*

*@paramkey

*解密的密钥*

*@paramraw

*已经加密的数据*

*@return解密后的明文*

*@throwsException

*/

publicstaticbyte[]decrypt(PrivateKeypk,byte[]raw)throwsException{

try{

Ciphercipher=Cipher.getInstance("RSA",

neworg.bouncycastle.jce.provider.BouncyCastleProvider());

cipher.init(cipher.DECRYPT_MODE,pk);

intblockSize=cipher.getBlockSize();

ByteArrayOutputStreambout=newByteArrayOutputStream(64);

intj=0;

while(raw.length-j*blockSize>0){

bout.write(cipher.doFinal(raw,j*blockSize,blockSize));

j++;

}

returnbout.toByteArray();

}catch(Exceptione){

thrownewException(e.getMessage());

}

}

/**

***

*

*@paramargs*

*@throwsException

*/

publicstaticvoidmain(String[]args)throwsException{

RSAPublicKeyrsap=(RSAPublicKey)RSAUtil.generateKeyPair().getPublic();

Stringtest="helloworld";

byte[]en_test=encrypt(getKeyPair().getPublic(),test.getBytes());

byte[]de_test=decrypt(getKeyPair().getPrivate(),en_test);

System.out.println(newString(de_test));

}

}

2.测试页面:

IndexAction.java

RSA加密解密算法的证明

1.选择两个质数 p, q

2.设 n=p* q

3.求出n的欧拉函数 f=(p-1)*(q-1)

4.在[2, f)的范誉握围内随机找一个与f互质的数 e作为公钥的指数

5.算出私钥指数d,d为公钥指数e对 f的一个模反元素,即 ed= kf+1(k为正整数)

6.将(n, e)封装成公钥,将(n, d)封装成私钥

1.设被加密的数为m, m为小于n的非庆扮庆负整数

2.算出 c=(m^e)% n,则 c即为密文

算出(c^d)%n,即为被加密的数m,证明如下。

因为  c=m^e- n*g,其中g为非负整数,

所以  (c^d)%n = [ (m^e- n*g) ^ d ] % n

展开多项式后将n的整数倍的项去除,得到

[( m^e)^d]% n

=[ m^(e*d) ]% n

=[ m^(k*f+1) ]% n

=[ m* m^(k*f) ]% n

={ m* [(m^f) ^ k]}% n

接下来分三种情况讨论:

第一种情况:m=0或者m=1

则 { m* [(m^f) ^ k]}% n= m

第二种情况:m>1,且m与n互质

根据 欧拉定理 ,m^f= h*n+1,其中h为正整数

则{ m* [(m^f) ^ k]}% n

={ m* [( h*n+1) ^ k]}% n

={ m* [ i*n+ 1 ]}% n  (其中i为展开指数多项式后合并n的同类项得到的正整数)

=m%n 

=m (因为m<n)

第三种情况:m>1,且m与n不互质

因为n=p*q,且p, q均为质数,则 m=j*p或者j*q,其中j为正整数

当m=j*p时,因为m<n,所以m与q互质

(证明:如果m, q不互质,则m含有质缺袜因数q,因为p与q互质,所以 j含有质因数p,这与m<n矛盾)

根据欧拉定理 m^(q-1)=x*q+1,其中x为正整数

则{ m* [(m^f) ^ k]}% n

={ m* [( m^[(p-1)*(q-1)]) ^ k]}% n

={ m* [ m^(q-1)^(p-1)^k ]}% n

={ j* p* [( x*q+1)^(p-1)^k ]}% n

={ j* p* [ y*q+ 1 ]}% n  (其中y为展开指数多项式后合并q的同类项得到的正整数)

=(j*p*y*q+ m)%n

=(j*y*n+m)% n

=m

同理,当m=j*q时也成立。

rsa在线加解密(rsa加密和解密c语言实现)(图1)

证明完毕。

RSA解密正确性证明_国科大网安二班的博客-CSDN博客

https://blog.csdn.net/weixin_46395886/article/details/114700012#:~:text=RSA%E8%A7%A3%E5%AF%86%E6%AD%A3%E7%A1%AE%E6%80%A7%E8%AF%81%E6%98%8E%20%E5%85%88%E6%8F%8F%E8%BF%B0%E4%B8%80%E4%B8%8BRSA%E5%AF%86%E7%A0%81%E4%BD%93%E5%88%B6%EF%BC%9A%20RSA%E5%AF%86%E7%A0%81%E4%BD%93%E5%88%B6%EF%BC%9A%20%E5%A4%A7%E7%B4%A0%E6%95%B0%20p%2Cq%20%EF%BC%8C%E6%A8%A1%E6%95%B0,n%20%3D%20pq%20%EF%BC%8C%E5%8A%A0%E5%AF%86%E6%8C%87%E6%95%B0%20b%20%EF%BC%8C%E8%A7%A3%E5%AF%86%E6%8C%87%E6%95%B0

RSA算法原理-知乎(zhihu.com)

https://zhuanlan.zhihu.com/p/48249182#:~:text=RSA%E7%AE%97%E6%B3%95%E5%8E%9F%E7%90%86%201%20%EF%BC%881%EF%BC%89%E4%B9%99%E6%96%B9%E7%94%9F%E6%88%90%E4%B8%A4%E6%8A%8A%E5%AF%86%E9%92%A5%20%28%E5%85%AC%E9%92%A5%E5%92%8C%E7%A7%81%E9%92%A5%29%E3%80%82...,2%20%EF%BC%882%EF%BC%89%E7%94%B2%E6%96%B9%E8%8E%B7%E5%8F%96%E4%B9%99%E6%96%B9%E7%9A%84%E5%85%AC%E9%92%A5%EF%BC%8C%E7%84%B6%E5%90%8E%E7%94%A8%E5%AE%83%E5%AF%B9%E4%BF%A1%E6%81%AF%E5%8A%A0%E5%AF%86%E3%80%82%203%20%EF%BC%883%EF%BC%89%E4%B9%99%E6%96%B9%E5%BE%97%E5%88%B0%E5%8A%A0%E5%AF%86%E5%90%8E%E7%9A%84%E4%BF%A1%E6%81%AF%EF%BC%8C%E7%94%A8%E7%A7%81%E9%92%A5%E8%A7%A3%E5%AF%86%E3%80%82

RSA加解密原理

RSA是目前使用最为广泛的公钥密码算法,公钥加密也称为非对称加密,与对称加密的最大区别在于加密与解密使用不同的密钥。

在RSA中,明文、密文和密钥都是数字,假设公钥用二元组(E,N)来表示,私钥用(D,N)来表示,其中E、D、N都是数字,那么加解密过程可表示如下:

可见,在RSA中,不论加密还是解密,都可归结为求x的y次幂对m取余问题。

生成RSA密钥可分成以下4步:

首先准备两个很大的质数p和q,那么N= p* q。

L= lcm(p-1, q-1)

由于存在恒等式gcd(a,b)* lcm(a,b)= a* b,求lcm可转换为求gcd,而求gcd可通过欧几里德算法在对数时间内算出。

E是一个比1大、比L小的数,且满足E与L互质,即有:gcd(E,L)=1, 1< E< L。gcd(E,L)=1是为了保证后面要求的数字D一定存在。

可不断地生成[2,L-1]之间的随机数作为E的候选数,检查是否满足条件,直到找出符合要求的E为止。

至此,E和N都已求出,那么公钥(E,N)也就得到了。

数D是由数E计算得到的,D、E和L之间满足关系:E* D mod L= 1, 1< D< L。

只要D满足运正上述条件,那么通过E与N加密的旁并悔内容,就可通过D和N进行解密。

求D也可采用类似求E的方法,不断产生随机数去试,直到找出满足条件的D为止,这样私钥(D,N)也准备好了。

为方面说明,这里用较小的数计算。先准备两个质数,例如,p=17, q=19,那么N=17*19=323,L=lcd(16,18)=144。

满足gcd(E,L)=1的数很多,例如5,7,11,13,25等,这里取E=5。

满足E*D mod L= 1的数也很多,这里取D=29。

到这里,公私钥都有了,公钥为(5,323),私蔽信钥为(29,323),公钥可任意公开,私钥则保密。

明文必须是小于N的数,因为加密运算中要求mod N。假设明文是123,用公钥(5,323)对其加密:

再用私钥(29,323)对密文225进行解密:

解出的明文与原始明文一致。

Android使用RSA加密和解密

1.data是要加密的数据,如果是字符串则getBytes。publicKey是公钥,privateKey是私钥。自定义密钥对测试

2.从文件中读取公钥

当加密的数据过长时,会出现javax.crypto.IllegalBlockSizeException: Data must not be longer than 117 bytes的异常。rsa算法规定一次加密的数据不能超过生成密钥对时的keyLength/8-11,keyLength一般是1024个字节,迹坦则加密的数据不能超过117个字节

测试分段加密和解密

生成公钥和私钥后,用base64编码

一、android加密的数据服务器上无法解密?

android的rsa加密方式是RSA/ECB/NoPadding,而标准jdk是RSA/ECB/PKCS1Padding,所以加密时要设置标准jdk的加密方式

二、base64编码。因为不同的设备对字符的处理方式不同,字符有可能处理出错,不利于传输。所以先把数据做base64编码,变成可见字符,减少出错

官方提供的base64类,Base64.encode编码,Base64.decode解码。用这个会有换行符,需要自定义

三、rsa是非对称加密算法。姿毕桐依赖于大数计算数运,加密速度比des慢,通常只用于加密少量数据或密钥

四、公钥加密比私钥加密块,公钥解密比私钥解密慢。加密后的数据大概是加密前的1.5倍

RSA加密解密算法示例(C语言)

#include<stdlib.h>

#include<stdio.h>

#include<没消string.h>

#include<math.h>

#include<time.h>

#define PRIME_MAX 200 //生成素数范围

#define EXPONENT_MAX 200//生成指数e范围

#define Element_Max 127  //加密单元的最大值,这里为一个char,即1Byte

char str_read[100]="hello world!"; //待加密的原文

int str_encrypt[100];        //加密后的内容

char str_decrypt[100];       //解密出来的内容

int str_read_len;          // str_read的长度

int prime1, prime2;         //随机生成的两个质数

int mod, eular;           //模数和欧拉数

int pubKey, priKey;         //公钥指数和私钥指数

//生成随机素数,实际应用中,这两个质数越大,就越难破解。

int randPrime()

{

int prime, prime2, i;

next:

prime= rand()% PRIME_MAX; //随机产生数

if(prime<= 1) goto next;   //不是质数,生成下一个随机数

if(prime== 2|| prime== 3) return prime;

prime2= prime/ 2;       // prime>=4, prime2的平方必定大于 prime,因此只检查银察厅小于等于prime2的数

for(i= 2; i<= prime2; i++) //判断是否为素数

{

if(i* i> prime) return prime;

if(prime% i== 0) goto next; //不是质数,生成下一个随机数

}

}

//欧几里德算法,判断a,b互质

int gcd(int a, int b)

{

int temp;

while(b!= 0){

temp= b;

b= a% b;

a= temp;

}

return a;

}

//生成公钥指数,条件是 1< e<欧拉数,且与欧拉数互质。

int randExponent()

{

int e;

while(1)

{

e= rand()% eular; if(e< EXPONENT_MAX) break;

}

while(1)

{

if(gcd(e, eular)== 1) return e; e=(e+ 1)% eular; if(e== 0|| e> EXPONENT_MAX) e= 2;

}

}

//生成私钥指数

int inverse()

{

int d, x;

while(1)

{

d= rand()% eular;

x= pubKey* d% eular;

if(x== 1)

{

return d;

}

}

}

//加密函数

void jiami()      

{

str_read_len= strlen(str_read);   //从参数表示的地址往后找,找到第一个'\0',即串锋隐尾。计算'\0'至首地址的“距离”,即隔了几个字符,从而得出长度。

printf("密文是:");

for(int i= 0; i< str_read_len; i++)

{

int C= 1; int a= str_read[i], b= a% mod;

for(int j= 0; j< pubKey; j++)//实现加密

{

C=(C*b)% mod;

}

str_encrypt[i]= C;

printf("%d", str_encrypt[i]);

}

printf("\n");

}

//解密函数

void jiemi()     

{

int i=0;  for(i= 0; i< str_read_len; i++)

{

int C= 1; int a= str_encrypt[i], b=a%mod;

for(int j= 0; j< priKey; j++)

{

C=(C* b)% mod;

}

str_decrypt[i]= C;

}

str_decrypt[i]='\0'; printf("解密文是:%s\n", str_decrypt);

}

int main()

{

srand(time(NULL));

while(1)

{

prime1= randPrime(); prime2= randPrime(); printf("随机产生两个素数:prime1=%d, prime2=%d", prime1, prime2);

mod= prime1* prime2; printf("模数:mod= prime1* prime2=%d\n", mod); if(mod> Element_Max) break;//模数要大于每个加密单元的值

}

eular=(prime1- 1)*(prime2- 1);  printf("欧拉数:eular=(prime1-1)*(prime2-1)=%d\n", eular);

pubKey= randExponent(); printf("公钥指数:pubKey=%d\n", pubKey);

priKey= inverse(); printf("私钥指数:priKey=%d\n私钥为(%d,%d)\n", priKey, priKey, mod);

jiami(); jiemi();

return 0;

}

rsa在线加解密的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于rsa加密和解密c语言实现、rsa在线加解密的信息别忘了在本站进行查找哦。

本文来源于互联网,不代表趣虎号立场,转载联系作者并注明出处:https://quhuhao.com/wzfl/13936.html

打赏 微信扫一扫 微信扫一扫
雷锋的原名(雷锋原名叫什么)
« 上一篇
java审批流(python做审批流)
下一篇 »

相关推荐

  • 闫字怎么读音(闫字怎么读音姓氏)
  • 贾组 词(贾组词组什么)
  • 电商在选品类阶段会踩的10个坑(做电商如何选品)
  • 20余省已公布高考查分时间(2023高考分数什么时候公布)
  • 霍金斯的十大预言(科学家霍金斯对未来作出的10大预测)
  • 南汇生活网论坛(南汇生活网论坛招聘)
  • relaxing是什么意思(relaxing是什么意思英语翻译)
  • 一畦春韭绿的下一句是什么(一畦春韭绿的下一句是什么诗句)
  • 洗剪吹什么意思(洗剪吹是什么意思污)
  • 围城必阙(围城必阙什么意思)

搜索干货

热门文章

  • 肉莲法器实物图(莲花含金刚杵图片)

    肉莲法器实物图(莲花含金刚杵图片)

    2024年01月05日

  • 济南718(济南银座718事件死了多少人

    济南718(济南银座718事件死了多少人

    2023年09月07日

  • 消失的夫妻知乎完整笔录(付刚笔录原文)

    消失的夫妻知乎完整笔录(付刚笔录原文)

    2023年08月22日

推荐文章

  • 用WhatsApp网页版打造娱乐休闲交流

    用WhatsApp网页版打造娱乐休闲交流

    2026年07月10日

  • 网页版-操作教程-为什么使用网页版

    网页版-操作教程-为什么使用网页版

    2026年06月27日

  • WhatsApp网页版:开启更便捷的在线

    WhatsApp网页版:开启更便捷的在线

    2026年06月24日

经典文章

  • 肉莲法器实物图(莲花含金刚杵图片)

    肉莲法器实物图(莲花含金刚杵图片)

    2024年01月05日

  • 济南718(济南银座718事件死了多少人

    济南718(济南银座718事件死了多少人

    2023年09月07日

  • 消失的夫妻知乎完整笔录(付刚笔录原文)

    消失的夫妻知乎完整笔录(付刚笔录原文)

    2023年08月22日

  • 云南电视台主持人杨珊(云南高严杨珊图片)

    云南电视台主持人杨珊(云南高严杨珊图片)

    2024年02月24日

  • 警察肩章级别(一二三四级警长对照表)

    警察肩章级别(一二三四级警长对照表)

    2023年08月22日

  • 华为员工级别1到22级对应工资(华为员工

    华为员工级别1到22级对应工资(华为员工

    2023年07月25日

  • 带老婆去找其他男人正常吗(成功开导老婆接

    带老婆去找其他男人正常吗(成功开导老婆接

    2023年08月14日

  • kyy网络词是什么意思(ky 网络用语)

    kyy网络词是什么意思(ky 网络用语)

    2023年08月22日

  • 消失的夫妻笔录(费县515付刚详细笔录)

    消失的夫妻笔录(费县515付刚详细笔录)

    2023年08月12日

  • 《暂坐》中性描写(名著中性描写原文摘录)

    《暂坐》中性描写(名著中性描写原文摘录)

    2023年08月15日

热门标签

创业项目 创业分享 创业项目加盟 生活百态 为什么灯珠会亮 WhatsApp网页版 农村创业
  • 首页
  • 文章分类
  • 专题

Copyright © 2012-2022 趣虎号 灵幻网络科技  网站备案号:皖ICP备2023009267号-2

友情链接: WhatsApp Web WhatsApp Web WhatsApp网页版 WhatsApp Web WhatsApp網頁版 WhatsApp网页版 WhatsApp網頁版 WhatsApp网页版 WhatsApp網頁版 WhatsApp Web WhatsApp網頁版 WhatsApp網頁版 WhatsApp Web WhatsApp網頁版 WhatsApp Web WhatsApp網頁版 WhatsApp Web WhatsApp网页版 WhatsApp Web WhatsApp Web WhatsApp网页版 WhatsApp网页版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp网页版 WhatsApp网页版 WhatsApp網頁版 WhatsApp Web WhatsApp Web WhatsApp Web WhatsApp網頁版 WhatsApp網頁版 WhatsApp Web WhatsApp網頁版 WhatsApp Web WhatsApp Web WhatsApp網頁版 WhatsApp Web WhatsApp网页版 WhatsApp Web WhatsApp网页版 WhatsApp网页版 WhatsApp網頁版 WhatsApp Web WhatsApp网页版 WhatsApp Web WhatsApp网页版 WhatsApp網頁版 WhatsApp网页版 WhatsApp网页版 WhatsApp网页版 WhatsApp網頁版 WhatsApp网页版 WhatsApp Web WhatsApp Web WhatsApp Web WhatsApp Web WhatsApp网页版 WhatsApp Web WhatsApp網頁版 WhatsApp网页版 WhatsApp网页版 WhatsApp網頁版 WhatsApp Web WhatsApp Web WhatsApp Web WhatsApp网页版 WhatsApp网页版 WhatsApp Web WhatsApp網頁版 WhatsApp Web WhatsApp网页版 WhatsApp Web WhatsApp Web WhatsApp網頁版 WhatsApp Web WhatsApp網頁版 WhatsApp網頁版 WhatsApp网页版 WhatsApp Web WhatsApp Web WhatsApp Web WhatsApp網頁版 WhatsApp网页版 WhatsApp Web WhatsApp Web WhatsApp网页版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp网页版 WhatsApp Web WhatsApp Web WhatsApp Web WhatsApp Web WhatsApp Web WhatsApp网页版 WhatsApp網頁版 WhatsApp Web WhatsApp网页版 WhatsApp Web WhatsApp網頁版 WhatsApp网页版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp Web WhatsApp網頁版 WhatsApp Web WhatsApp Web WhatsApp網頁版 WhatsApp网页版 WhatsApp网页版 WhatsApp Web WhatsApp Web WhatsApp Web WhatsApp Web WhatsApp網頁版 WhatsApp Web WhatsApp網頁版 WhatsApp网页版 WhatsApp網頁版 WhatsApp网页版 WhatsApp网页版 WhatsApp网页版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp Web WhatsApp Web WhatsApp網頁版 WhatsApp Web WhatsApp網頁版 WhatsApp網頁版 WhatsApp Web WhatsApp網頁版 WhatsApp网页版 WhatsApp Web WhatsApp Web WhatsApp網頁版 WhatsApp网页版 WhatsApp Web WhatsApp網頁版 WhatsApp網頁版 WhatsApp网页版 WhatsApp Web WhatsApp网页版 WhatsApp網頁版 WhatsApp网页版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp网页版 WhatsApp網頁版 WhatsApp Web WhatsApp Web WhatsApp Web WhatsApp Web WhatsApp Web WhatsApp Web WhatsApp网页版 WhatsApp Web WhatsApp Web WhatsApp網頁版 WhatsApp網頁版 WhatsApp网页版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp Web WhatsApp网页版 WhatsApp网页版 WhatsApp Web WhatsApp網頁版 WhatsApp Web WhatsApp網頁版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp Web WhatsApp網頁版 WhatsApp网页版 WhatsApp网页版 WhatsApp Web WhatsApp网页版 WhatsApp Web WhatsApp網頁版 WhatsApp网页版 WhatsApp網頁版 WhatsApp网页版 WhatsApp网页版 WhatsApp网页版 WhatsApp網頁版 WhatsApp Web WhatsApp Web WhatsApp Web WhatsApp網頁版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp网页版 WhatsApp Web WhatsApp网页版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp网页版 WhatsApp网页版 WhatsApp網頁版 WhatsApp Web WhatsApp網頁版 WhatsApp网页版 WhatsApp Web WhatsApp網頁版 WhatsApp网页版 WhatsApp网页版 WhatsApp网页版 WhatsApp网页版 WhatsApp Web WhatsApp网页版 WhatsApp Web WhatsApp網頁版 WhatsApp網頁版 WhatsApp Web WhatsApp網頁版 WhatsApp网页版 WhatsApp网页版 WhatsApp网页版 WhatsApp網頁版 WhatsApp网页版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp Web WhatsApp网页版 WhatsApp網頁版 WhatsApp Web WhatsApp網頁版 WhatsApp網頁版 WhatsApp网页版 WhatsApp网页版 WhatsApp Web WhatsApp網頁版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp网页版 WhatsApp网页版 WhatsApp Web WhatsApp Web WhatsApp網頁版 WhatsApp Web WhatsApp网页版 WhatsApp Web WhatsApp Web WhatsApp網頁版 WhatsApp网页版 WhatsApp Web WhatsApp网页版 WhatsApp网页版 WhatsApp网页版 WhatsApp網頁版 WhatsApp Web WhatsApp網頁版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp网页版 WhatsApp網頁版 WhatsApp网页版 WhatsApp Web WhatsApp網頁版 WhatsApp Web WhatsApp網頁版 WhatsApp Web WhatsApp Web WhatsApp網頁版 WhatsApp網頁版 WhatsApp网页版 WhatsApp Web WhatsApp网页版 WhatsApp网页版 WhatsApp Web WhatsApp網頁版 WhatsApp网页版 WhatsApp网页版 WhatsApp Web WhatsApp Web WhatsApp网页版 WhatsApp网页版 WhatsApp Web WhatsApp Web WhatsApp网页版 WhatsApp网页版 WhatsApp Web WhatsApp网页版 WhatsApp网页版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp网页版 WhatsApp网页版 WhatsApp Web WhatsApp网页版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp网页版 WhatsApp网页版 WhatsApp Web WhatsApp網頁版 WhatsApp网页版 WhatsApp网页版 WhatsApp网页版 WhatsApp網頁版 WhatsApp网页版 WhatsApp網頁版 WhatsApp Web WhatsApp Web WhatsApp網頁版 WhatsApp Web WhatsApp Web WhatsApp网页版 WhatsApp Web WhatsApp Web WhatsApp網頁版 WhatsApp網頁版 WhatsApp Web WhatsApp网页版 WhatsApp網頁版 WhatsApp网页版 WhatsApp Web WhatsApp Web WhatsApp网页版 WhatsApp網頁版 WhatsApp Web WhatsApp網頁版 WhatsApp网页版 WhatsApp网页版 WhatsApp Web WhatsApp网页版 WhatsApp Web WhatsApp網頁版 WhatsApp Web WhatsApp Web WhatsApp網頁版 WhatsApp網頁版 WhatsApp Web WhatsApp Web WhatsApp网页版 WhatsApp網頁版 WhatsApp网页版 WhatsApp網頁版 WhatsApp网页版 WhatsApp Web WhatsApp Web WhatsApp Web WhatsApp Web WhatsApp Web WhatsApp網頁版 WhatsApp網頁版 WhatsApp网页版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp网页版 WhatsApp Web WhatsApp网页版 WhatsApp Web WhatsApp網頁版 WhatsApp Web WhatsApp网页版 WhatsApp网页版 WhatsApp網頁版 WhatsApp Web WhatsApp网页版 WhatsApp Web WhatsApp Web WhatsApp网页版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp网页版 WhatsApp网页版 WhatsApp网页版 WhatsApp Web WhatsApp Web WhatsApp网页版 WhatsApp Web WhatsApp網頁版 WhatsApp网页版 WhatsApp網頁版 WhatsApp Web WhatsApp Web WhatsApp網頁版 WhatsApp Web WhatsApp网页版 WhatsApp网页版 WhatsApp网页版 WhatsApp Web WhatsApp網頁版 WhatsApp网页版 WhatsApp Web WhatsApp網頁版 WhatsApp網頁版 WhatsApp网页版 WhatsApp網頁版 WhatsApp网页版 WhatsApp网页版 WhatsApp網頁版 WhatsApp网页版 WhatsApp网页版 WhatsApp Web WhatsApp網頁版 WhatsApp网页版 WhatsApp网页版 WhatsApp Web WhatsApp网页版 WhatsApp网页版 WhatsApp网页版 WhatsApp网页版 WhatsApp網頁版 WhatsApp Web WhatsApp Web WhatsApp Web WhatsApp網頁版 WhatsApp網頁版 WhatsApp网页版 WhatsApp Web WhatsApp网页版 WhatsApp網頁版 WhatsApp网页版 WhatsApp網頁版 WhatsApp Web WhatsApp Web WhatsApp网页版 WhatsApp网页版 WhatsApp网页版 WhatsApp网页版 WhatsApp網頁版 WhatsApp网页版 WhatsApp Web WhatsApp网页版 WhatsApp网页版 WhatsApp Web WhatsApp網頁版 WhatsApp網頁版 WhatsApp网页版 WhatsApp網頁版 WhatsApp Web WhatsApp Web WhatsApp網頁版 WhatsApp网页版 WhatsApp Web WhatsApp网页版 WhatsApp网页版 WhatsApp Web WhatsApp网页版 WhatsApp Web WhatsApp網頁版 WhatsApp Web WhatsApp網頁版 WhatsApp網頁版 WhatsApp网页版 WhatsApp Web WhatsApp Web WhatsApp网页版 WhatsApp網頁版 WhatsApp网页版 WhatsApp网页版 WhatsApp Web WhatsApp Web WhatsApp Web WhatsApp Web WhatsApp網頁版 WhatsApp网页版 WhatsApp网页版 WhatsApp網頁版 WhatsApp网页版 WhatsApp网页版 WhatsApp網頁版 WhatsApp Web WhatsApp网页版 WhatsApp Web WhatsApp网页版 WhatsApp Web WhatsApp网页版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp Web WhatsApp網頁版 WhatsApp网页版 WhatsApp网页版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp Web WhatsApp网页版 WhatsApp網頁版 WhatsApp網頁版 WhatsApp网页版 WhatsApp網頁版 WhatsApp網頁版

联系我们

在线咨询:点击这里给我发消息

微信号:

工作日:9:30-18:30,节假日休息

友情链接: 海外中文学习网 - 海外華人繁體中文學習平台 海外中文学习网 - 海外華人繁體中文學習平台