当前位置:首页 » 安卓系统 » desandroid

desandroid

发布时间: 2022-11-29 11:13:35

A. Android编程问题之R.drawable.icon

Android 自带图标库 android.R.drawable
desandroidstylejavahtmlsrc文件Gocom
在xml文件中调用。
android:title="@string/secure_connect"
android:orderInCategory="100"
android:icon="@android:drawable/ic_menu_search"
android:drawableRight="@android:drawable/arrow_down_float"/>
程序中调用。
setIcon(android.R.drawable.stat_notify_error)
Android 自带图标库 android.R.drawable

B. android des加密 秘钥长度有什么要求

DES加密算法的密钥长度是56位,分组长度是64位

C. Android加密算法总结

1.概念:
Base64是一种用64个字符(+/)来表示二进制数据的方法,只是一种编码方式,所以不建议使用Base64来进行加密数据。

2.由来:
为什么会有Base64编码呢?因为计算机中数据是按ascii码存储的,而ascii码的128~255之间的值是不可见字符。在网络上交换数据时,比如图片二进制流的每个字节不可能全部都是可见字符,所以就传送不了。最好的方法就是在不改变传统协议的情况下,做一种扩展方案来支持二进制文件的传送,把不可打印的字符也能用可打印字符来表示,所以就先把数据先做一个Base64编码,统统变成可见字符,降低错误率。

3.示例:

加密和解密用到的密钥是相同的,这种加密方式加密速度非常快,适合经常发送数据的场合。缺点是密钥的传输比较麻烦。

1.DES
DES全称为Data Encryption Standard,即数据加密标准,是一种使用 密钥加密 的块算法。
DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位,使得每个密钥都有奇数个1)分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。

2.3DES
3DES(或称为Triple DES)是三重 数据加密算法 (TDEA,Triple Data Encryption Algorithm)块密码的通称。是DES向AES过渡的加密算法,它使用3条56位的密钥对数据进行三次加密。是DES的一个更安全的变形。它以DES为基本模块,通过组合分组方法设计出分组加密算法。比起最初的DES,3DES更为安全。

3.AES
AES全称Advanced Encryption Standard,即高级加密标准,当今最流行的对称加密算法之一,是DES的替代者。支持三种长度的密钥:128位,192位,256位。

AES算法是把明文拆分成一个个独立的明文块,每一个明文块长128bit。这些明文块经过AES加密器的复杂处理,生成一个个独立的密文块,这些密文块拼接在一起,就是最终的AES加密结果。
但是这里涉及到一个问题:假如一段明文长度是192bit,如果按每128bit一个明文块来拆分的话,第二个明文块只有64bit,不足128bit。这时候怎么办呢?就需要对明文块进行填充(Padding):

AES的工作模式,体现在把明文块加密成密文块的处理过程中。

加密和解密用的密钥是不同的,这种加密方式是用数学上的难解问题构造的,通常加密解密的速度比较慢,适合偶尔发送数据的场合。优点是密钥传输方便。

1.SHA
安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的安全散列算法。能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法,且若输入的消息不同,它们对应到不同字符串的机率很高。
SHA分为SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512五种算法,后四者有时并称为SHA-2。SHA-1在许多安全协定中广为使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec,曾被视为是MD5(更早之前被广为使用的杂凑函数)的后继者。但SHA-1的安全性如今被密码学家严重质疑;虽然至今尚未出现对SHA-2有效的攻击,它的算法跟SHA-1基本上仍然相似;因此有些人开始发展其他替代的杂凑算法。

2.RSA
RSA算法1978年出现,是第一个既能用于数据加密也能用于数字签名的算法,易于理解和操作。
RSA基于一个数论事实:将两个大素数相乘十分容易,但想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥。公钥是可提供给任何人使用,私钥则为自己所有,供解密之用。

3.MD5
MD5信息摘要算法 (英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值,用于确保信息传输完整一致。具有如下优点:

XOR:异或加密,既将某个字符或者数值 x 与一个数值 m 进行异或运算得到 y ,则再用 y 与 m 进行异或运算就可还原为 x。
使用场景:
(1)两个变量的互换(不借助第三个变量);
(2)数据的简单加密解密。

D. android des加密怎么用

android des加密其实是可以使用java api自带的算法,例子如下:
通过上面资料的阅读,解决办法就很简单了。
首先在Mainifest.xml的Activity元素中加入android:configChanges="orientation|keyboardHidden"属性
<activity android:name=".FileBrowser"
android:label="@string/app_name"
android:configChanges="orientation|keyboardHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

加入这条属性的含义是,应用程序将会处理屏幕方向和键盘状态(推出或合上)信息的改动。但对于其他的设备配置信息的改动则会由Android系统来处理(销毁当前Activity,然后重启一个新的Activity实例)。

E. 跪求 DES跨(C# Android IOS)三个平台通用的加解密方法


#region跨平台加解密(c#安卓IOS)

//publicstaticstringsKey="12345678";

/////<summary>

/////解密

/////</summary>

/////<paramname="pToDecrypt">要解密的以Base64</param>

/////<paramname="sKey">密钥,且必须为8位</param>

/////<returns>已解密的字符串</returns>

//publicstaticstringDesDecrypt(stringpToDecrypt)

//{

////转义特殊字符

//pToDecrypt=pToDecrypt.Replace("-","+");

//pToDecrypt=pToDecrypt.Replace("_","/");

//pToDecrypt=pToDecrypt.Replace("~","=");

//byte[]inputByteArray=Convert.FromBase64String(pToDecrypt);

//using(DESCryptoServiceProviderdes=newDESCryptoServiceProvider())

//{

//des.Key=ASCIIEncoding.ASCII.GetBytes(sKey);

//des.IV=ASCIIEncoding.ASCII.GetBytes(sKey);

//System.IO.MemoryStreamms=newSystem.IO.MemoryStream();

//using(CryptoStreamcs=newCryptoStream(ms,des.CreateDecryptor(),CryptoStreamMode.Write))

//{

//cs.Write(inputByteArray,0,inputByteArray.Length);

//cs.FlushFinalBlock();

//cs.Close();

//}

//stringstr=Encoding.UTF8.GetString(ms.ToArray());

//ms.Close();

//returnstr;

//}

//}

/////<summary>

/////对字符串进行DES加密

/////</summary>

/////<paramname="sourceString">待加密的字符串</param>

/////<returns>加密后的BASE64编码的字符串</returns>

//publicstringEncrypt(stringsourceString)

//{

//byte[]btKey=Encoding.UTF8.GetBytes(sKey);

//byte[]btIV=Encoding.UTF8.GetBytes(sKey);

//DESCryptoServiceProviderdes=newDESCryptoServiceProvider();

//using(MemoryStreamms=newMemoryStream())

//{

//byte[]inData=Encoding.UTF8.GetBytes(sourceString);

//try

//{

//using(CryptoStreamcs=newCryptoStream(ms,des.CreateEncryptor(btKey,btIV),CryptoStreamMode.Write))

//{

//cs.Write(inData,0,inData.Length);

//cs.FlushFinalBlock();

//}

//returnConvert.ToBase64String(ms.ToArray());

//}

//catch

//{

//throw;

//}

//}

//}

#endregion

安卓---------------------------------------------------------------------------

////加密

//(Stringmessage,Stringkey)

//throwsException{

//byte[]bytesrc=Base64.decode(message.getBytes(),Base64.DEFAULT);

//Ciphercipher=Cipher.getInstance("DES/CBC/PKCS5Padding");

//DESKeySpecdesKeySpec=newDESKeySpec(key.getBytes("UTF-8"));

//SecretKeyFactorykeyFactory=SecretKeyFactory.getInstance("DES");

//SecretKeysecretKey=keyFactory.generateSecret(desKeySpec);

//IvParameterSpeciv=newIvParameterSpec(key.getBytes("UTF-8"));

//cipher.init(Cipher.DECRYPT_MODE,secretKey,iv);

//byte[]retByte=cipher.doFinal(bytesrc);

//returnnewString(retByte);

//}

////解密

//(Stringmessage,Stringkey)

//throwsException{

//Ciphercipher=Cipher.getInstance("DES/CBC/PKCS5Padding");

//DESKeySpecdesKeySpec=newDESKeySpec(key.getBytes("UTF-8"));

//SecretKeyFactorykeyFactory=SecretKeyFactory.getInstance("DES");

//SecretKeysecretKey=keyFactory.generateSecret(desKeySpec);

//IvParameterSpeciv=newIvParameterSpec(key.getBytes("UTF-8"));

//cipher.init(Cipher.ENCRYPT_MODE,secretKey,iv);

//byte[]encryptbyte=cipher.doFinal(message.getBytes());

//returnnewString(Base64.encode(encryptbyte,Base64.DEFAULT));

//}

Ios--------------------------------------------------------------------------------------------------------------------

staticconstchar*encryptWithKeyAndType(constchar*text,CCOperationencryptOperation,char*key)
{
NSString*textString=[[NSStringalloc]initWithCString:textencoding:NSUTF8StringEncoding];
//NSLog(@"[[item.urldescription]UTF8String=%@",textString);
constvoid*dataIn;
size_tdataInLength;

if(encryptOperation==kCCDecrypt)//传递过来的是decrypt解码
{
//解码base64
NSData*decryptData=[GTMBase64decodeData:[textStringdataUsingEncoding:NSUTF8StringEncoding]];//转成utf-8并decode
dataInLength=[decryptDatalength];
dataIn=[decryptDatabytes];
}
else//encrypt
{
NSData*encryptData=[textStringdataUsingEncoding:NSUTF8StringEncoding];
dataInLength=[encryptDatalength];
dataIn=(constvoid*)[encryptDatabytes];
}


CCCryptorStatusccStatus;
uint8_t*dataOut=NULL;//可以理解位type/typedef的缩写(有效的维护了代码,比如:一个人用int,一个人用long。最好用typedef来定义)
size_tdataOutAvailable=0;//size_t是操作符sizeof返回的结果类型
size_tdataOutMoved=0;

dataOutAvailable=(dataInLength+kCCBlockSizeDES)&~(kCCBlockSizeDES-1);
dataOut=malloc(dataOutAvailable*sizeof(uint8_t));
memset((void*)dataOut,00,dataOutAvailable);//将已开辟内存空间buffer的首1个字节的值设为值0

//NSString*initIv=@"12345678";
constvoid*vkey=key;
constvoid*iv=(constvoid*)key;//[initIvUTF8String];

//CCCrypt函数加密/解密
ccStatus=CCCrypt(encryptOperation,//加密/解密
kCCAlgorithmDES,//加密根据哪个标准(des,3des,aes。。。。)
kCCOptionPKCS7Padding,//选项分组密码算法(des:对每块分组加一次密3DES:对每块分组加三个不同的密)
vkey,//密钥加密和解密的密钥必须一致
kCCKeySizeDES,//DES密钥的大小(kCCKeySizeDES=8)
iv,//可选的初始矢量
dataIn,//数据的存储单元
dataInLength,//数据的大小
(void*)dataOut,//用于返回数据
dataOutAvailable,
&dataOutMoved);

NSString*result=nil;

if(encryptOperation==kCCDecrypt)//encryptOperation==1解码
{
//得到解密出来的data数据,改变为utf-8的字符串
result=[[NSStringalloc]initWithData:[NSDatadataWithBytes:(constvoid*)dataOutlength:(NSUInteger)dataOutMoved]encoding:NSUTF8StringEncoding];
}
else//encryptOperation==0(加密过程中,把加好密的数据转成base64的)
{
//编码base64
NSData*data=[NSDatadataWithBytes:(constvoid*)dataOutlength:(NSUInteger)dataOutMoved];
result=[GTMBase64stringByEncodingData:data];
}

return[resultUTF8String];

}
+(NSString*)encryptWithContent:(NSString*)contenttype:(CCOperation)typekey:(NSString*)aKey
{
constchar*contentChar=[contentUTF8String];
char*keyChar=(char*)[aKeyUTF8String];
constchar*miChar;
miChar=encryptWithKeyAndType(contentChar,type,keyChar);
return[NSStringstringWithCString:miCharencoding:NSUTF8StringEncoding];
}

F. 安卓常见的一些加密((对称加密DES,AES),非对称加密(RSA),MD5)

DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法。DES加密算法出自IBM的研究,
后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为DES使用56位密钥,以现代计算能力,
24小时内即可被破解

调用过程

最近做微信小程序获取用户绑定的手机号信息解密,试了很多方法。最终虽然没有完全解决,但是也达到我的极限了。有时会报错:javax.crypto.BadPaddingException: pad block corrupted。

出现错误的详细描述
每次刚进入小程序登陆获取手机号时,会出现第一次解密失败,再试一次就成功的问题。如果连续登出,登入,就不会再出现揭秘失败的问题。但是如果停止操作过一会,登出后登入,又会出现第一次揭秘失败,再试一次就成功的问题。
网上说的,官方文档上注意点我都排除了。获取的加密密文是在前端调取wx.login()方法后,调用我后端的微信授权接口,获取用户的sessionkey,openId.然后才是前端调用的获取sessionkey加密的用户手机号接口,所以我可以保证每次sessionkey是最新的。不会过期。
并且我通过日志发现在sessionkey不变的情况下,第一次失败,第二次解密成功。

加密算法,RSA是绕不开的话题,因为RSA算法是目前最流行的公开密钥算法,既能用于加密,也能用户数字签名。不仅在加密货币领域使用,在传统互联网领域的应用也很广泛。从被提出到现在20多年,经历了各种考验,被普遍认为是目前最优秀的公钥方案之一

非对称加密算法的特点就是加密秘钥和解密秘钥不同,秘钥分为公钥和私钥,用私钥加密的明文,只能用公钥解密;用公钥加密的明文,只能用私钥解密。

一、 什么是“素数”?
素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积
二、什么是“互质数”(或“互素数”)?
小学数学教材对互质数是这样定义的:“公约数只有1的两个数,叫做互质数
(1)两个质数一定是互质数。例如,2与7、13与19。
(2)一个质数如果不能整除另一个合数,这两个数为互质数。例如,3与10、5与 26。
(3)1不是质数也不是合数,它和任何一个自然数在一起都是互质数。如1和9908。
(4)相邻的两个自然数是互质数。如 15与 16。
(5)相邻的两个奇数是互质数。如 49与 51。
(6)大数是质数的两个数是互质数。如97与88。
(7)小数是质数,大数不是小数的倍数的两个数是互质数。如 7和 16。
(8)两个数都是合数(二数差又较大),小数所有的质因数,都不是大数的约数,这两个数是互质数。如357与715,357=3×7×17,而3、7和17都不是715的约数,这两个数为互质数。等等。
三、什么是模指数运算?
指数运算谁都懂,不必说了,先说说模运算。模运算是整数运算,有一个整数m,以n为模做模运算,即m mod n。怎样做呢?让m去被n整除,只取所得的余数作为结果,就叫做模运算。例如,10 mod 3=1;26 mod 6=2;28 mod 2 =0等等。
模指数运算就是先做指数运算,取其结果再做模运算。如(5^3) mod 7 = (125 mod 7) = 6。

其中,符号^表示数学上的指数运算;mod表示模运算,即相除取余数。具体算法步骤如下:
(1)选择一对不同的、足够大的素数p,q。
(2)计算n=p q。
(3)计算f(n)=(p-1)
(q-1),同时对p, q严加保密,不让任何人知道。
(4)找一个与f(n)互质的数e作为公钥指数,且1<e<f(n)。
(5)计算私钥指数d,使得d满足(d*e) mod f(n) = 1
(6)公钥KU=(e,n),私钥KR=(d,n)。
(7)加密时,先将明文变换成0至n-1的一个整数M。若明文较长,可先分割成适当的组,然后再进行交换。设密文为C,则加密过程为:C=M^e mod n。
(8)解密过程为:M=C^d mod n。

在RSA密码应用中,公钥KU是被公开的,即e和n的数值可以被第三方窃听者得到。破解RSA密码的问题就是从已知的e和n的数值(n等于pq),想法求出d的数值,这样就可以得到私钥来破解密文。从上文中的公式:(d e) mod ((p-1) (q-1)) = 1,我们可以看出,密码破解的实质问题是:从p q的数值,去求出(p-1)和(q-1)。换句话说,只要求出p和q的值,我们就能求出d的值而得到私钥。
当p和q是一个大素数的时候,从它们的积p
q去分解因子p和q,这是一个公认的数学难题。比如当p*q大到1024位时,迄今为止还没有人能够利用任何计算工具去完成分解因子的任务。因此,RSA从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。
缺点1:虽然RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。即RSA的重大缺陷是无法从理论上把握它的保密性能如何。

在android 开发的很多时候。为了保证用户的账户的安全性,再保存用户的密码时,通常会采用MD5加密算法,这种算法是不可逆的,具有一定的安全性

MD5不是加密算法, 因为如果目的是加密,必须满足的一个条件是加密过后可以解密。但是MD5是无法从结果还原出原始数据的。

MD5只是一种哈希算法

G. Android网络请求加密机制

密码学的三大作用:加密( Encryption)、认证(Authentication),鉴定(Identification)

加密 :防止坏人获取你的数据。 

鉴权 :防止坏人假冒你的身份。

认证 :防止坏人修改了你的数据而你却并没有发现。

1. URLEncode和URLDecoder 作用:URLEncode就是将URL中特殊部分进行编码。URLDecoder就是对特殊部分进行解码。

为什么URL要encode原因呢?

url转义其实也只是为了符合url的规范而已。因为在标准的url规范中 中文和很多的字符 是不允许出现在url中的。

2. Base64编码

为什么要进行Base64编码?

在计算机中任何数据都是按ascii码存储的,而ascii码的128~255之间的值是不可见字符。而在网络上交换数据时,比如说从A地传到B地,往往要经过多个路由设备,由于不同的设备对字符的处理方式有一些不同,这样那些不可见字符就有可能被处理错误,这是不利于传输的。所以就先把数据先做一个Base64编码,统统变成可见字符,这样出错的可能性就大降低了。

应用场景:主要是对于二进制数据进行编码,(文件、图片、加密后的二进制数据)

3. 消息认证算法

要确保加密的消息不是别人伪造的,需要提供一个消息认证码(MAC,Message authentication code) 。 

消息认证码是带密钥的hash函数,基于密钥和hash函数(单向散列函数)。

密钥双方事先约定,不能让第三方知道。

消息发送者使用MAC算法计算出消息的MAC值,追加到消息后面一起发送给接收者。 

接收者收到消息后,用相同的MAC算法计算接收到消息MAC值,并与接收到的MAC值对比是否一样。

消息认证码的作用:检查某段消息的完整性,以及作身份验证。

防止重放 攻击可以有 3 种方法:

序号

每条消息都增加一个递增的序号,并且在计算 MAC 值的时候把序号也包含在消息中。这样攻击者如果不破解消息认证码就无法计算出正确的 MAC 值。这个方法的弊端是每条消息都需要多记录最后一个消息的序号。

时间戳

发送消息的时候包含当前时间,如果收到的时间与当前的不符,即便 MAC 值正确也认为是错误消息直接丢弃。这样也可以防御重放攻击。这个方法的弊端是,发送方和接收方的时钟必须一致,考虑到消息的延迟,所以需要在时间上留下一定的缓冲余地。这个缓冲之间还是会造成重放攻击的可趁之机。

nonce

在通信之前,接收者先向发送者发送一个一次性的随机数 nonce。发送者在消息中包含这个 nonce 并计算 MAC 值。由于每次 nonce 都会变化,因此无法进行重放攻击。这个方法的缺点会导致通信的数据量增加。

4. 对称加密算法

特点:加解密只有一个密钥。优点:速度快、效率高。缺点:密钥交换问题。算法:AES(256字节,主流)、DES(8字节,淘汰)。

密钥交换问题如何解决,MAC同样也有这个问题,可以使用非对称加密传输,或者私下约定,密钥管理中心。

5. 非对称加密

非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密(这个过程可以做数字签名) 。 非对称加密主要使用的是RSA算法。

特点:公/私钥机制。优点:只需要交换公钥,安全。缺点:加解密速度慢,特别是解密。算法:RSA。应用:数字签名。

数字签名 :

简单解释:

A:将明文进行摘要运算后得到摘要(消息完整性),再将摘要用A的私钥加密(身份认证),得到数字签名,将密文和数字签名一块发给B。

B:收到A的消息后,先将密文用自己的私钥解密,得到明文。将数字签名用A的公钥进行解密后,得到正确的摘要(解密成功说明A的身份被认证了)。

数字证书 :

6. Android端 AES+RSA结合实践

基本流程

Android端

服务器端

基本上如下图所示的流程:

H. 安卓开发 DES加密与电脑上的不一样

DES加密其实都大同小异的。
Java里面有人帮我们把这些加密的类都写好了,或者SDK里面自带就有接口可以调。
你看他们demo不一样,是指加密的方式不一样,还是用到的类不一样?
DES安全性相对3DES来说要弱不些,因此现在很多人是在用3DES。
而且密钥的用法也不一样,有些人用固定的密钥,有些人用随机生成的密钥。
楼主把问题描述具体一点吧。

I. android 怎样进行des加密

虽然DES加密对于现在来说不是一种可靠的加密方法了
但对于一些比较简单的应用,还可以用它来加密
。。。。
话不多说,直接上源码
首先是DES类的源码,里面有加密和解密的方法
http://blog.csdn.net/puhaiyang/article/details/44007125

J. android加密算法有哪些

android中用的到加密:

  1. Https编程 :应该是使用带安全的网络协议处理。除非你本地需要加密

2.数据签名:混淆代码和防二次打包的APK加密技术

3.对称加密:可以先将数据通过某种加密方式加密发送到服务器端,然后服务器端再解密 ,项目中除了登陆,支付等接口采用rsa非对称加密,之外的采用aes对称加密

4.非对称加密====支付宝

数字摘要是指通过算法将长数据变为短数据,通常用来标识数据的唯一性,是否被修改,常用的加密算法有md5和sha1两种,如Android的App签名也是用的这两种算法。

由于以上两种生成数字摘要的算法都是不可逆的,对于可逆的加密算法中,按照密钥的数量和加密规则一半分为对称加密和非对称加密两类:

对称加密:

密钥可以自己指定,只有一把密钥,如果密钥泄漏数据就会暴漏;

常用的对称加密算法有DES和AES两种;

特点是加密速度快,但是缺点是安全性低,因为只要密钥暴漏,数据就可以被解密。

非对称加密的特点:

常见的非对称加密算法是RSA;

他有两把密钥,且是由程序生成的,不能自己指定;

特点是加密速度比较慢,但是安全性比较高;

加密和解密的规则是:公钥加密只能私钥解密,私钥加密只能公钥解密;

热点内容
手机存储根目录在哪 发布:2025-03-11 11:23:39 浏览:264
php写入日志 发布:2025-03-11 11:11:32 浏览:904
安卓qq邮箱在qq哪里可以看到 发布:2025-03-11 10:51:33 浏览:265
windows内核安全编程源码 发布:2025-03-11 10:50:51 浏览:990
狗追兔子编程 发布:2025-03-11 10:45:35 浏览:543
存储过程in参数 发布:2025-03-11 10:35:29 浏览:121
双字节加密 发布:2025-03-11 10:35:19 浏览:984
小米4android71 发布:2025-03-11 10:33:51 浏览:946
怎么用ftp上传网站 发布:2025-03-11 10:25:30 浏览:192
酷狗传歌到手机文件夹 发布:2025-03-11 10:14:58 浏览:579