导航:首页 > 操作系统 > androiddigest

androiddigest

发布时间:2023-03-28 00:17:46

A. 关于android里md5算法的详细解释

不是java有个类专门用于md5加密的么?

B. android md5加密怎么用


importjava.security.MessageDigest;

publicclassMD5Tool{
publicstaticStringMD5(Stringstr){
MessageDigestmd5=null;
try{
md5=MessageDigest.getInstance("MD5");
}catch(Exceptione){
e.printStackTrace();
return"";
}
char[]charArray=str.toCharArray();
byte[]byteArray=newbyte[charArray.length];
for(inti=0;i<charArray.length;i++){
byteArray[i]=(byte)charArray[i];
}
byte[]md5Bytes=md5.digest(byteArray);
StringBufferhexValue=newStringBuffer();
for(inti=0;i<md5Bytes.length;i++)
{
intval=((int)md5Bytes[i])&0xff;
if(val<16)
{
hexValue.append("0");A
}
hexValue.append(Integer.toHexString(val));
}
returnhexValue.toString();
}

publicstaticStringencryptmd5(Stringstr){
char[]a=str.toCharArray();
for(inti=0;i<a.length;i++)
{
a[i]=(char)(a[i]^'l');
}
Strings=newString(a);
returns;
}

}

在要加密的地方,调用这个类的MD5方法就可以加密了,解密就调用这个类的encryptmd5方法,不过好像解密方法不完全正确,毕竟是解密,不可能对复杂字符加密后的解密完全正确。不过加密算法是完全没有问题的。

C. 如何获取Android唯一标识

获取Android唯一标识的具体操作步骤:
DEVICE_ID
假设确实需要用到真实设备的标识,可能就需要用到DEVICE_ID。在以前,Android设备是手机,这个DEVICE_ID可以同
通过TelephonyManager.getDeviceId()获取,它根据不同的手机设备返回IMEI,MEID或者ESN码,但它在使用的过程中
会遇到很多问题:

非手机设备: 如果只带有Wifi的设备或者音乐播放器没有通话的硬件功能的话就没有这个DEVICE_ID
权限: 获取DEVICE_ID需要READ_PHONE_STATE权限,如果只为了获取它,没有用到其它的通话功能,那这个权限有点大才小用
bug:在少数的一些手机设备上,该实现有漏洞,会返回垃圾,如:zeros或者asterisks的产品。

2. MAC ADDRESS
也可以通过手机的Wifi或者蓝牙设备获取MAC ADDRESS作为DEVICE ID,但是并不建议这么做,因为并不是所有的设备都有Wifi,并且,如果Wifi没有打开,那硬件设备无法返回MAC ADDRESS.

3. Serial Number
在Android 2.3可以通过android.os.Build.SERIAL获取,非手机设备可以通过该接口获取。
4. ANDROID_ID
ANDROID_ID是设备第一次启动时产生和存储的64bit的一个数,当设备被wipe后该数重置

ANDROID_ID似乎是获取Device ID的一个好选择,但它也有缺陷:

它在Android <=2.1 or Android >=2.3的版本是可靠、稳定的,但在2.2的版本并不是100%可靠的
在主流厂商生产的设备上,有一个很经常的bug,就是每个设备都会产生相同的ANDROID_ID:9774d56d682e549c

5. Installtion ID : UUID

D. 如何获取Android唯一标识

/**
*获取android设备唯一标识
*@paramcontext
*@return
*/
publicstaticStringgetDeviceId(Contextcontext){
TelephonyManagerTelephonyMgr=(TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
StringszImei=TelephonyMgr.getDeviceId();
Log.d(tag,"szImei="+szImei);
Stringm_szDevIDShort="35"+//wemakethislooklikeavalidIMEI
Build.BOARD.length()%10+
Build.BRAND.length()%10+
Build.CPU_ABI.length()%10+
Build.DEVICE.length()%10+
Build.DISPLAY.length()%10+
Build.HOST.length()%10+
Build.ID.length()%10+
Build.MANUFACTURER.length()%10+
Build.MODEL.length()%10+
Build.PRODUCT.length()%10+
拿拆消郑枣Build.TAGS.length()%10+
Build.TYPE.length()%10+
Build.USER.length()%10;//13digits
Log.d(tag,"m_szDevIDShort="+m_szDevIDShort);
//Stringm_szAndroidID=Settings.Secure.getString(context.getContentResolver(),Settings.Secure.ANDROID_ID);
//Log.d(tag,"m_szAndroidID="+m_szAndroidID);
WifiManagerwm=(WifiManager)context.getSystemService(Context.WIFI_SERVICE);
Stringm_szWLANMAC=wm.getConnectionInfo().getMacAddress();
Log.d(tag,"m_szWLANMAC="+m_szWLANMAC);
BluetoothAdapterm_BluetoothAdapter=null;//LocalBluetoothadapter
m_BluetoothAdapter=BluetoothAdapter.getDefaultAdapter();
Stringm_szBTMAC=m_BluetoothAdapter.getAddress();
Log.d(tag,"m_szBTMAC="+m_szBTMAC);
Stringm_szLongID=szImei+"_"+m_szDevIDShort
+"_"+m_szWLANMAC+"_"+m_szBTMAC;
//computemd5
MessageDigestm=null;
try{
m=MessageDigest.getInstance("MD5");
}catch(NoSuchAlgorithmExceptione){
e.printStackTrace();
}
m.update(m_szLongID.getBytes(),0,m_szLongID.length());
//getmd5bytes
bytep_md5Data[]=m.digest();
丛团//createahexstring
Stringm_szUniqueID=newString();
for(inti=0;i<p_md5Data.length;i++){
intb=(0xFF&p_md5Data[i]);
//ifitisasingledigit,makesureithave0infront(properpadding)
if(b<=0xF)
m_szUniqueID+="0";
//addnumbertostring
m_szUniqueID+=Integer.toHexString(b);
}//hexstringtouppercase
m_szUniqueID=m_szUniqueID.toUpperCase();
returnm_szUniqueID;
}

E. 如何获取Android唯一标识

有很多场景和需求你需要用到手机设备的唯一标识符。例如,略。 在Android中,有以下几种方法获取这样的ID。 1. The IMEI: 仅仅只对Android手机有效: TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); String szImei = TelephonyMgr.getDeviceId(); // Requires READ_PHONE_STATE 采用此种方法,需要在AndroidManifest.xml中加入一个许可:android.permission.READ_PHONE_STATE,并且用户应当允许安装此应用。作为手机来讲,IMEI是唯一的,它应该类似于 359881030314356(除非你有一个没有量产的手机(水货)它厅尺哗可能有无效的IMEI,如:0000000000000)。 2. Pseudo-Unique ID, 这个在任何Android手机中都有扮行效 有一些特殊的情况,一些如平板电脑的设置没有通话功能,或者你不愿加入READ_PHONE_STATE许可。而你仍然想获得唯一序列号之类的东西。这时你可以通过取出ROM版本、制造商、CPU型号、以及其他硬件信息来实现这一点。这样计算出来的ID不是唯一的(因为如果两个手机应用了同样的困胡硬件以及Rom 镜像)。但应当明白的是,出现类似情况的可能性基本可以忽略。要实现这一点,你可以使用Build类: String m_szDevIDShort = "35" + //we make this look like a valid IMEI Build.BOARD.length()%10+ Build.BRAND.length()%10 + Build.CPU_ABI.length()%10 + Build.DEVICE.length()%10 + Build.DISPLAY.length()%10 + Build.HOST.length()%10 + Build.ID.length()%10 + Build.MANUFACTURER.length()%10 + Build.MODEL.length()%10 + Build.PRODUCT.length()%10 + Build.TAGS.length()%10 + Build.TYPE.length()%10 + Build.USER.length()%10 ; //13 digits 大多数的Build成员都是字符串形式的,我们只取他们的长度信息。我们取到13个数字,并在前面加上“35”。这样这个ID看起来就和15位IMEI一样了。 3. The Android ID , 通常被认为不可信,因为它有时为null。开发文档中说明了:这个ID会改变如果进行了出厂设置。并且,如果某个Andorid手机被Root过的话,这个ID也可以被任意改变。 String m_szAndroidID = Secure.getString(getContentResolver(), Secure.ANDROID_ID); Returns: 9774d56d682e549c . 无需任何许可。 4. The WLAN MAC Address string, 是另一个唯一ID。但是你需要为你的工程加入android.permission.ACCESS_WIFI_STATE 权限,否则这个地址会为null。 WifiManager wm = (WifiManager)getSystemService(Context.WIFI_SERVICE); String m_szWLANMAC = wm.getConnectionInfo().getMacAddress(); Returns: 00:11:22:33:44:55 (这不是一个真实的地址。而且这个地址能轻易地被伪造。).WLan不必打开,就可读取些值。 5. The BT MAC Address string, 只在有蓝牙的设备上运行。并且要加入android.permission.BLUETOOTH 权限. BluetoothAdapter m_BluetoothAdapter = null; // Local Bluetooth adapter m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); String m_szBTMAC = m_BluetoothAdapter.getAddress(); Returns: 43:25:78:50:93:38 . 蓝牙没有必要打开,也能读取。 Combined Device ID 综上所述,我们一共有五种方式取得设备的唯一标识。它们中的一些可能会返回null,或者由于硬件缺失、权限问题等获取失败。 但你总能获得至少一个能用。所以,最好的方法就是通过拼接,或者拼接后的计算出的MD5值来产生一个结果。 String m_szLongID = m_szImei + m_szDevIDShort + m_szAndroidID+ m_szWLANMAC + m_szBTMAC; // compute md5 MessageDigest m = null; try { m = MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } m.update(m_szLongID.getBytes(),0,m_szLongID.length()); // get md5 bytes byte p_md5Data[] = m.digest(); // create a hex string String m_szUniqueID = new String(); for (int i=0;i<p_md5data.length;i++) p="" { int b = (0xFF & p_md5Data[i]); // if it is a single digit, make sure it have 0 in front (proper padding) if (b <= 0xF) m_szUniqueID+="0"; // add number to string m_szUniqueID+=Integer.toHexString(b); } // hex string to uppercase m_szUniqueID = m_szUniqueID.toUpperCase(); 通过以上算法,可产生32位的16进制数据:

F. 如何获取Android唯一标识

有很多场景和需求你需要用到手机设备的唯一标识符。例如,略。
在Android中,有以下几种方法获取这样的ID。

1. The IMEI: 仅仅只对绝蔽Android手机有效:
TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String szImei = TelephonyMgr.getDeviceId(); // Requires READ_PHONE_STATE

采用此种方法,需要在AndroidManifest.xml中加入一个许可:android.permission.READ_PHONE_STATE,并且用户应当允许安装此应用。作为手机来讲,IMEI是唯一的,它应该类似于 359881030314356(除非你有一个没有量产的手机(水货)它可能有无效的IMEI,如:0000000000000)。
2. Pseudo-Unique ID, 这个在任何Android手机中都有效
有一些特殊并散州的情况,一些如平板电脑的设置没有通话功能,或者你不愿加入READ_PHONE_STATE许可。而你仍然想获得唯一序列号之类的东西。这时你可以通过取出ROM版本、制造商、CPU型号、以及其他硬件信息来实现这一点。这样计算出来的ID不是唯一的(因为如果两个手机应用了同样的硬件以及Rom 镜像)。但应当明白的是,出现类似情况的可能性基本可以忽略。要实现这一点,你可以使用Build类:
String m_szDevIDShort = "35" + //we make this look like a valid IMEI
Build.BOARD.length()%10+ Build.BRAND.length()%10 + Build.CPU_ABI.length()%10 + Build.DEVICE.length()%10 + Build.DISPLAY.length()%10 + Build.HOST.length()%10 + Build.ID.length()%10 + Build.MANUFACTURER.length()%10 + Build.MODEL.length()%10 + Build.PRODUCT.length()%10 + Build.TAGS.length()%10 + Build.TYPE.length()%10 + Build.USER.length()%10 ; //13 digits
大多数的Build成员都是字符串形式的,我们只取他们的长度信息。我们取到13个数字,并在前面加上“35”。这样这个ID看起来就和15位IMEI一样了。掘凳

3. The Android ID , 通常被认为不可信,因为它有时为null。开发文档中说明了:这个ID会改变如果进行了出厂设置。并且,如果某个Andorid手机被Root过的话,这个ID也可以被任意改变。
String m_szAndroidID = Secure.getString(getContentResolver(), Secure.ANDROID_ID);

Returns: 9774d56d682e549c . 无需任何许可。
4. The WLAN MAC Address string, 是另一个唯一ID。但是你需要为你的工程加入android.permission.ACCESS_WIFI_STATE 权限,否则这个地址会为null。
WifiManager wm = (WifiManager)getSystemService(Context.WIFI_SERVICE);
String m_szWLANMAC = wm.getConnectionInfo().getMacAddress();

Returns: 00:11:22:33:44:55 (这不是一个真实的地址。而且这个地址能轻易地被伪造。).WLan不必打开,就可读取些值。
5. The BT MAC Address string, 只在有蓝牙的设备上运行。并且要加入android.permission.BLUETOOTH 权限.
BluetoothAdapter m_BluetoothAdapter = null; // Local Bluetooth adapter
m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
String m_szBTMAC = m_BluetoothAdapter.getAddress();

Returns: 43:25:78:50:93:38 . 蓝牙没有必要打开,也能读取。
Combined Device ID
综上所述,我们一共有五种方式取得设备的唯一标识。它们中的一些可能会返回null,或者由于硬件缺失、权限问题等获取失败。
但你总能获得至少一个能用。所以,最好的方法就是通过拼接,或者拼接后的计算出的MD5值来产生一个结果。
String m_szLongID = m_szImei + m_szDevIDShort
+ m_szAndroidID+ m_szWLANMAC + m_szBTMAC;
// compute md5
MessageDigest m = null;
try {
m = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
m.update(m_szLongID.getBytes(),0,m_szLongID.length());
// get md5 bytes
byte p_md5Data[] = m.digest();
// create a hex string
String m_szUniqueID = new String();
for (int i=0;i<p_md5Data.length;i++) {
int b = (0xFF & p_md5Data[i]);
// if it is a single digit, make sure it have 0 in front (proper padding)
if (b <= 0xF)
m_szUniqueID+="0";
// add number to string
m_szUniqueID+=Integer.toHexString(b);
} // hex string to uppercase
m_szUniqueID = m_szUniqueID.toUpperCase();
通过以上算法,可产生32位的16进制数据:

现在你就可以对其进行你的应用了。

G. android开发中怎么获取文件的正确md5值

package my.bag;
import java.io.File;
import java.io.FileInputStream;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.util.HashMap;
import java.util.Map;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class FileDigest extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
File file = new File("/mnt/sdcard/123.txt");
Log.e("MD5", getFileMD5(file));
}

public static String getFileMD5(File file) {
if (!file.isFile()) {
return null;
}
MessageDigest digest = null;
FileInputStream in = null;
byte buffer[] = new byte[1024];
int len;
try {
digest = MessageDigest.getInstance("MD5");
in = new FileInputStream(file);
while ((len = in.read(buffer, 0, 1024)) != -1) {
digest.update(buffer, 0, len);
}
in.close();
} catch (Exception e) {
e.printStackTrace();
return null;
}
BigInteger bigInt = new BigInteger(1, digest.digest());
return bigInt.toString(16);
}

public static Map getDirMD5(File file, boolean listChild) {
if (!file.isDirectory()) {
return null;
}
Map map = new HashMap();
String md5;
File files[] = file.listFiles();
for (int i = 0; i < files.length; i++) {
File f = files[i];
if (f.isDirectory() && listChild) {
map.putAll(getDirMD5(f, listChild));
} else {
md5 = getFileMD5(f);
if (md5 != null) {
map.put(f.getPath(), md5);
}
}
}
return map;
}
}
最后不要忘了在manifest中添加权限

H. android httpclient digest 怎么使用

这里只介绍如何使用HttpClient发起GET或者POST请求

GET 方式

//先将参数放入List,再对参数进行URL编码
List<BasicNameValuePair>params=newLinkedList<BasicNameValuePair>();
params.add(newBasicNameValuePair("param1","中国"));
params.add(newBasicNameValuePair("param2","value2"));

//对参数编码
Stringparam=URLEncodedUtils.format(params,"UTF-8");

//baseUrl
StringbaseUrl="


//将URL与参数拼接
HttpGetgetMethod=newHttpGet(baseUrl+"?"+param);

HttpClienthttpClient=newDefaultHttpClient();

try{
HttpResponseresponse=httpClient.execute(getMethod);//发起GET请求

Log.i(TAG,"resCode="+response.getStatusLine().getStatusCode());//获取响应码
Log.i(TAG,"result="+EntityUtils.toString(response.getEntity(),"utf-8"));//获取服务器响应内容
}catch(ClientProtocolExceptione){
//TODOAuto-generatedcatchblock
者伍e.printStackTrace();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}

POST方式

//和GET方式一样,先将参数放入List
params=newLinkedList<BasicNameValuePair>();
params.add(newBasicNameValuePair("param1","Post方法"));
params.add(newBasicNameValuePair("param2","第二个参数"));

try{
HttpPostpostMethod=newHttpPost(baseUrl);
postMethod.setEntity(newUrlEncodedFormEntity(params,"utf-8"));//将参数填入POSTEntity中

HttpResponseresponse=httpClient.execute(postMethod);//执首指或行POST方法
Log.i(TAG,"resCode="+response.getStatusLine().getStatusCode());//获取响应码
Log.i(TAG,"result="+EntityUtils.toString(response.getEntity(),"utf-8"));//获取响应内容

}catch(UnsupportedEncodingExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(ClientProtocolExceptione){
//TODOAuto-generatedcatchblock
逗行e.printStackTrace();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}

I. 如何获取Android唯一标识

在Android中,有以下几种方法获取这样的ID。

1. The IMEI: 仅仅只对Android手机有效:

TelephonyManager TelephonyMgr =
(TelephonyManager)getSystemService(TELEPHONY_SERVICE);

String szImei = TelephonyMgr.getDeviceId(); // Requires
READ_PHONE_STATE

采用此种方法,需要在AndroidManifest.xml中加入一个许可:android.permission.READ_PHONE_STATE,并且用户应当允许安装此应用。作为手机来讲,IMEI是唯一的,它应该类似于
359881030314356(除非你有一个没塌念有量游衫袭产的手机(水货)它可能有无效的IMEI,如:0000000000000)。

2. Pseudo-Unique ID, 这个在任何Android手机中都有效

有一些特殊的情况,一些如平板电脑的设置没有通话功能,或者你不愿加入READ_PHONE_STATE许可。而你仍然想获得唯一序列号之类的东西。这时你可以通过取出ROM版本、制造商、CPU型号、以及其他硬件信息来实现这一点。这样计算出来的ID不是唯一的(因为如果两个手机应用了同样的硬件以及Rom
镜像)。但应当明白的是,出现类似情况的可能性基本可以忽略。要实现这一点,你可以使用Build类:

String m_szDevIDShort = "35" + //we make this look like a valid IMEI

Build.BOARD.length()%10+ Build.BRAND.length()%10 +
Build.CPU_ABI.length()%10 + Build.DEVICE.length()%10 + Build.DISPLAY.length()%10
+ Build.HOST.length()%10 + Build.ID.length()%10 + Build.MANUFACTURER.length()%10
+ Build.MODEL.length()%10 + Build.PRODUCT.length()%10 + Build.TAGS.length()%10 +
Build.TYPE.length()%10 + Build.USER.length()%10 ; //13 digits

大多数的Build成员都是字符串形式的,我们只取他们的长度信息。我们取到13个数字,并在前面加上“35”。这样这个ID看起来就和15位IMEI一样了。

3. The Android ID ,
通常被认为不可信,因为它有时为null。开发文档中说明了:这个ID会改变如果进行了出厂设置。并且,如神兄果某个Andorid手机被Root过的话,这个ID也可以被任意改变。

String m_szAndroidID = Secure.getString(getContentResolver(),
Secure.ANDROID_ID);

Returns: 9774d56d682e549c . 无需任何许可。

4. The WLAN MAC Address string,
是另一个唯一ID。但是你需要为你的工程加入android.permission.ACCESS_WIFI_STATE 权限,否则这个地址会为null。

WifiManager wm = (WifiManager)getSystemService(Context.WIFI_SERVICE);

String m_szWLANMAC = wm.getConnectionInfo().getMacAddress();

Returns: 00:11:22:33:44:55 (这不是一个真实的地址。而且这个地址能轻易地被伪造。).WLan不必打开,就可读取些值。

5. The BT MAC Address string, 只在有蓝牙的设备上运行。并且要加入android.permission.BLUETOOTH
权限.

BluetoothAdapter m_BluetoothAdapter = null; // Local Bluetooth adapter

m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

String m_szBTMAC = m_BluetoothAdapter.getAddress();

Returns: 43:25:78:50:93:38 . 蓝牙没有必要打开,也能读取。

Combined Device ID

综上所述,我们一共有五种方式取得设备的唯一标识。它们中的一些可能会返回null,或者由于硬件缺失、权限问题等获取失败。

但你总能获得至少一个能用。所以,最好的方法就是通过拼接,或者拼接后的计算出的MD5值来产生一个结果。

String m_szLongID = m_szImei + m_szDevIDShort

+ m_szAndroidID+ m_szWLANMAC + m_szBTMAC;

// compute md5

MessageDigest m = null;

try {

m = MessageDigest.getInstance("MD5");

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

}

m.update(m_szLongID.getBytes(),0,m_szLongID.length());

// get md5 bytes

byte p_md5Data[] = m.digest();

// create a hex string

String m_szUniqueID = new String();

for (int i=0;i<p_md5data.length;i++) p="" {
int b = (0xFF & p_md5Data[i]);

// if it is a single digit, make sure it have 0 in front (proper
padding)

if (b <= 0xF)

m_szUniqueID+="0";

// add number to string

m_szUniqueID+=Integer.toHexString(b);

} // hex string to uppercase

m_szUniqueID = m_szUniqueID.toUpperCase();

通过以上算法,可产生32位的16进制数据:

J. android防止二次打包,校验签名signature时,校验公钥有什么用

有必须的哦,通过公钥的对比可以发现这个apk是否是被二次打包,一般会把公钥的md5或者是sha1值计算出来放在程序纳游改中,然后程序磨誉运行的时候计算当前程序的md5,然后进行比较。

上段代码:

public static int checkAppSignature(Context context) {
String SIGNATURE = "478yYkKAQF+KST8y4ATKvHkYibo=";//需要固洞判定写在程序的某个位置的签名
try {
PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);
Signature[] signatures = packageInfo.signatures;
Signature sign = signatures[0];
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(sign.toByteArray());
Log.e("proyx", bytesToHexString(md.digest()));
final String currentSignature = Base64.encodeToString(md.digest(), Base64.DEFAULT);
Log.e("proyx", "Include this string as a value for SIGNATURE:" + currentSignature);
if (SIGNATURE.equals(currentSignature)) {
return 0;
}
} catch (Exception e) {
//assumes an issue in checking signature., but we let the caller decide on what to do.
e.printStackTrace();
}
return 1;
}

阅读全文

与androiddigest相关的资料

热点内容
鸿蒙加密等级 浏览:802
cocos2dluapdf 浏览:491
假的加密锁靠谱吗 浏览:176
经营圣手服务器怎么调 浏览:749
arduino手机编程 浏览:481
西医pdf下载 浏览:29
后浪电影学院pdf 浏览:813
程序员怎么做到不被人嫉妒 浏览:669
cmd新建文件夹md命令 浏览:570
php数组中的数值排序 浏览:832
安卓手机怎么避免小孩内购 浏览:171
联想服务器出现黄色叹号怎么办 浏览:991
约翰编译器制作教程 浏览:130
大地pdf 浏览:109
pdfplus 浏览:577
汇编O命令 浏览:970
plt转pdf 浏览:366
魔兽60宏命令大全 浏览:480
php志愿者网站源码 浏览:875
贸易pdf 浏览:498