Android傳輸數據時加密詳解_第1頁
Android傳輸數據時加密詳解_第2頁
Android傳輸數據時加密詳解_第3頁
Android傳輸數據時加密詳解_第4頁
Android傳輸數據時加密詳解_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Android傳輸數據時加密詳解Android傳輸數據時加密詳解ONEGoal,ONEPassion!——————–MD5加密———————MD5即Message-DigestAlgorithm5(信息-摘要算法5),用于確保信息傳輸完整一致。是計算機廣泛使用的雜湊算法之一(又譯摘要算法、哈希算法),主流編程語言普遍已有MD5實現。將數據(如漢字)運算為另一固定長度值,是雜湊算法的基礎原理,MD5的前身有MD2、MD3和MD4MD5算法具有以下特點:1、壓縮性:任意長度的數據,算出的MD5值長度都是固定的。2、容易計算:從原數據計算出MD5值很容易。3、抗修改性:對原數據進行任何改動,哪怕只修改1個字節(jié),所得到的MD5值都有很大區(qū)別。4、強抗碰撞:已知原數據和其MD5值,想找到一個具有相同MD5值的數據(即偽造數據)是非常困難的。5.MD5加密是不可逆的.MD5算法:publicstaticStringgetMD5(Stringstr){byte[]source=str.getBytes()Strings=null;charhexDigits[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};//用來將字節(jié)轉換成16進制表示的字符try{java.security.MessageDigestmd=java.security.MessageDigest.getInstance("MD5");md.update(source);bytetmp[]=md.digest();//MD5的計算結果是一個128位的長整數,//用字節(jié)表示就是16個字節(jié)charstr0[]=newchar[16*2];//每個字節(jié)用16進制表示的話,使用兩個字符,所以表示成16//進制需要32個字符intk=0;//表示轉換結果中對應的字符位置for(inti=0;i<16;i++){//從第一個字節(jié)開始,對MD5的每一個字節(jié)//轉換成16//進制字符的轉換bytebyte0=tmp[i];//取第i個字節(jié)str0[k++]=hexDigits[byte0>>>4&0xf];//取字節(jié)中高4位的數字轉換,//>>>//為邏輯右移,將符號位一起右移str0[k++]=hexDigits[byte0&0xf];//取字節(jié)中低4位的數字轉換}s=newString(str0);//換后的結果轉換為字符串}catch(NoSuchAlgorithmExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}returns;}MD5使用場景:傳輸類似用戶名的密碼時.此時使用MD5直接將數據加密后提交到后臺.因為后臺不需要知道用戶名密碼.可以直接將接收到的經過MD5加密后數據存儲到數據庫.這也就是為什么許多應用只能重置密碼,卻不能找回密碼.特別注意:現在由于網絡MD5數據庫比較大,如果直接使用md5加密的話,很容易被破譯出來.這是在加密的過程中”加鹽”就可以大大避免直接被破譯的危險.———————RSA非對稱可逆加密———————RSA加密原理概述:RSA的安全性依賴于大數的分解,公鑰和私鑰都是兩個大素數(大于100的十進制位)的函數。從一個密鑰和密文推斷出明文的難度等同于分解兩個大素數的積1.選擇兩個大素數p,q,計算n=p*q;2.隨機選擇加密密鑰e,要求e和(p-1)*(q-1)互質3.利用Euclid算法計算解密密鑰d,使其滿足e*d=1(mod(p-1)*(q-1))(其中n,d也要互質)4:至此得出公鑰為(n,e)私鑰為*(n,d)加解密方法:1.首先將要加密的信息m(二進制表示)分成等長的數據塊m1,m2,…,mi塊長s(盡可能大),其中2^s<n2:對應的密文是:ci=mi^e(modn)3:解密時作如下計算:mi=ci^d(modn)RSA速度:由于進行的都是大數計算,使得RSA最快的情況也比DES慢上100倍,無論是軟件還是硬件實現。速度一直是RSA的缺陷。一般來說只用于少量數據加密。1.如何生成密鑰對(公鑰,私鑰):第一種方式:通過OpenSSl工具生成密鑰對OpenSSl工具下載:OpenSSl工具(64位的也可使用)使用OpenSSl工具生成密鑰對的過程如下:首先雙擊打開bin文件夾下的openssl.exe,打開之后是一個命令行窗口,執(zhí)行下面窗口:RSA密鑰生成命令:生成RSA私鑰:genrsa-outrsa_private_key.pem102411這條命令是讓openssl隨機生成了一份私鑰,加密長度是1024位,密鑰長度,范圍:512~2048。執(zhí)行完命令后就可在bin文件夾下看到rsa_private_key.pem文件了。用文本類工具打開可看到里面的內容:-----BEGINRSAPRIVATEKEY-----MIICXAIBAAKBgQC8rPqGGsar+BWI7vAtaaDOqphy41j5186hCU9DcchV4HWiv0HvQ3KXAEqHfZiAHZSyMSRMmDZVnqJwCVWFvKUPqU1RsCPZ9Imk+9ZXVkM3DDdw74v/s6YMNx8cTuxybRCJUfOKbyC79cnHgmQqqkODv+EnprBtNKE4k8g90jNmbwIDAQABAoGAS06Hl+ssDQuyHLux5Y5ZfuOcgY64vtAiSyhaGMNbgNtcWJ8aBBPZsueM19OLgOdNqGnw4RmH5liw4SL4na6T+qGpblEW/4G1eQXXJvfIBhlYJupaSvhuTf3msFw4z9GY8V29deGPx5/6FRVTPTqnLoxUlfloOCYCeDJrXa9+YGECQQD24cdN9MT3HqfP3S+UEDHO3XaDq38V3sCnKQ5mSYtnst/NV/g4bqYUOYElQW27p0YgwhHLlxWPke8a4Jz/r4lnAkEAw6TfA36kUZfnFIXNM/0250jyZDE/yEKBXhThO8DAXAyAaEHjxA7K+eprXP7ayFIfy+nrz/W5Iy81ibP5G/4tuQJBALaDn9ZP+DVBIoqXWI87kbb/Hpik9mTysrZhsdWI1Viqcq3aNRVzJ7CX+pPSVQ9/0GZzUriST0w+dOgH2clkuk0CQDXXhdh8XdRmrZ2kRRjtstJr7OlN9HO0ec3eiS3cmhO7DQukNn6aY5nrvahWKve+QinoMpGE2nKoZ1+CPChMB2ECQG8utIhzAGH0lKbv/3+SzDERStrFYn/WqpWG3qSXAMyes24khuRPtMYPzIxI/wZYPazbKgxuERAhiRtpz0e9jvI=-----ENDRSAPRIVATEKEY-----這里面的內容是標準的ASCII字符,中間的一大串字符就是私鑰數據了。生成RSA公鑰:rsa-inrsa_private_key.pem-outrsa_public_key.pem-pubout打開文件看下里面的內容:-----BEGINPUBLICKEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8rPqGGsar+BWI7vAtaaDOqphy41j5186hCU9DcchV4HWiv0HvQ3KXAEqHfZiAHZSyMSRMmDZVnqJwCVWFvKUPqU1RsCPZ9Imk+9ZXVkM3DDdw74v/s6YMNx8cTuxybRCJUfOKbyC79cnHgmQqqkODv+EnprBtNKE4k8g90jNmbwIDAQAB-----ENDPUBLICKEY-----這樣密鑰就基本生成了,不過這樣密鑰對的私鑰是無法在代碼中直接使用的,要想使用它需要借助RSAPrivateKeyStructure這個類,Java是不自帶的。所以為了方便使用,我們需要對私鑰進行PKCS#8編碼,命令如下:pkcs8-topk8-inrsa_private_key.pem-outpkcs8_rsa_private_key.pem-nocrypt這條命令的結果依然是在bin文件夾生成了pkcs8_rsa_private_key.pem文件,打開內容如下:-----BEGINPRIVATEKEY-----MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALys+oYaxqv4FYju8C1poM6qmHLjWPnXzqEJT0NxyFXgdaK/Qe9DcpcASod9mIAdlLIxJEyYNlWeonAJVYW8pQ+pTVGwI9n0iaT71ldWQzcMN3Dvi/+zpgw3HxxO7HJtEIlR84pvILv1yceCZCqqQ4O/4SemsG00oTiTyD3SM2ZvAgMBAAECgYBLToeX6ywNC7Icu7Hljll+45yBjri+0CJLKFoYw1uA21xYnxoEE9my54zX04uA502oafDhGYfmWLDhIvidrpP6oaluURb/gbV5Bdcm98gGGVgm6lpK+G5N/eawXDjP0ZjxXb114Y/Hn/oVFVM9OqcujFSV+Wg4JgJ4Mmtdr35gYQJBAPbhx030xPcep8/dL5QQMc7ddoOrfxXewKcpDmZJi2ey381X+DhuphQ5gSVBbbunRiDCEcuXFY+R7xrgnP+viWcCQQDDpN8DfqRRl+cUhc0z/TbnSPJkMT/IQoFeFOE7wMBcDIBoQePEDsr56mtc/trIUh/L6evP9bkjLzWJs/kb/i25AkEAtoOf1k/4NUEiipdYjzuRtv8emKT2ZPKytmGx1YjVWKpyrdo1FXMnsJf6k9JVD3/QZnNSuJJPTD506AfZyWS6TQJANdeF2Hxd1GatnaRFGO2y0mvs6U30c7R5zd6JLdyaE7sNC6Q2fppjmeu9qFYq975CKegykYTacqhnX4I8KEwHYQJAby60iHMAYfSUpu//f5LMMRFK2sVif9aqlYbepJcAzJ6zbiSG5E+0xg/MjEj/Blg9rNsqDG4RECGJG2nPR72O8g==-----ENDPRIVATEKEY-----第二種方式:通過批處理文件直接生成.強烈建議使用下載支付寶提供的密鑰對生成工具./detail/fengltxx/9674172解壓,閱讀文檔操作:密鑰對已經生成了.我們怎么使用呢?公鑰互換:a.首先要有兩對密鑰:android端一對(android公鑰,android私鑰)服務器端一對(服務器公鑰,服務器私鑰)b.開始交換1.android開發(fā)人員將android公鑰(字符串形式公鑰,或者文件形式建議文件形式)給服務器人員2.服務器發(fā)開人員將服務器公鑰(字符串形式公鑰,或者文件形式建議文件形式)給android開發(fā)人員c.數據傳輸過程加密,解密android開發(fā)人員傳輸數據時使用服務器公鑰加密服務器開發(fā)人員拿著私鑰對android端傳遞過來的數據進行解密注意:加密,解密時.需要將字符串形式的密鑰轉換成Key對象的密鑰2.封裝RSA的工具類,方便加密解密的操作:RSAUtils工具類:packagecom.example.rsa;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.math.BigInteger;importjava.security.KeyFactory;importjava.security.KeyPair;importjava.security.KeyPairGenerator;importjava.security.NoSuchAlgorithmException;importjava.security.PrivateKey;importjava.security.PublicKey;importerfaces.RSAPrivateKey;importerfaces.RSAPublicKey;importjava.security.spec.InvalidKeySpecException;importjava.security.spec.PKCS8EncodedKeySpec;importjava.security.spec.RSAPublicKeySpec;importjava.security.spec.X509EncodedKeySpec;importjavax.crypto.Cipher;publicfinalclassRSAUtils{privatestaticStringRSA="RSA";/***隨機生成RSA密鑰對(默認密鑰長度為1024)**@return*/publicstaticKeyPairgenerateRSAKeyPair(){returngenerateRSAKeyPair(1024);}/***隨機生成RSA密鑰對**@paramkeyLength*密鑰長度,范圍:512~2048<br>*一般1024*@return*/publicstaticKeyPairgenerateRSAKeyPair(intkeyLength){try{KeyPairGeneratorkpg=KeyPairGenerator.getInstance(RSA);kpg.initialize(keyLength);returnkpg.genKeyPair();}catch(NoSuchAlgorithmExceptione){e.printStackTrace();returnnull;}}/***用公鑰加密<br>*每次加密的字節(jié)數,不能超過密鑰的長度值減去11**@paramdata*需加密數據的byte數據*@parampubKey*公鑰*@return加密后的byte型數據*/publicstaticbyte[]encryptData(byte[]data,PublicKeypublicKey){try{Ciphercipher=Cipher.getInstance(RSA);//編碼前設定編碼方式及密鑰cipher.init(Cipher.ENCRYPT_MODE,publicKey);//傳入編碼數據并返回編碼結果returncipher.doFinal(data);}catch(Exceptione){e.printStackTrace();returnnull;}}/***用私鑰解密**@paramencryptedData*經過encryptedData()加密返回的byte數據*@paramprivateKey*私鑰*@return*/publicstaticbyte[]decryptData(byte[]encryptedData,PrivateKeyprivateKey){try{Ciphercipher=Cipher.getInstance(RSA);cipher.init(Cipher.DECRYPT_MODE,privateKey);returncipher.doFinal(encryptedData);}catch(Exceptione){returnnull;}}/***通過公鑰byte[](publicKey.getEncoded())將公鑰還原,適用于RSA算法**@paramkeyBytes*@return*@throwsNoSuchAlgorithmException*@throwsInvalidKeySpecException*/publicstaticPublicKeygetPublicKey(byte[]keyBytes)throwsNoSuchAlgorithmException,InvalidKeySpecException{X509EncodedKeySpeckeySpec=newX509EncodedKeySpec(keyBytes);KeyFactorykeyFactory=KeyFactory.getInstance(RSA);PublicKeypublicKey=keyFactory.generatePublic(keySpec);returnpublicKey;}/***通過私鑰byte[]將公鑰還原,適用于RSA算法**@paramkeyBytes*@return*@throwsNoSuchAlgorithmException*@throwsInvalidKeySpecException*/publicstaticPrivateKeygetPrivateKey(byte[]keyBytes)throwsNoSuchAlgorithmException,InvalidKeySpecException{PKCS8EncodedKeySpeckeySpec=newPKCS8EncodedKeySpec(keyBytes);KeyFactorykeyFactory=KeyFactory.getInstance(RSA);PrivateKeyprivateKey=keyFactory.generatePrivate(keySpec);returnprivateKey;}/***使用N、e值還原公鑰**@parammodulus*@parampublicExponent*@return*@throwsNoSuchAlgorithmException*@throwsInvalidKeySpecException*/publicstaticPublicKeygetPublicKey(Stringmodulus,StringpublicExponent)throwsNoSuchAlgorithmException,InvalidKeySpecException{BigIntegerbigIntModulus=newBigInteger(modulus);BigIntegerbigIntPrivateExponent=newBigInteger(publicExponent);RSAPublicKeySpeckeySpec=newRSAPublicKeySpec(bigIntModulus,bigIntPrivateExponent);KeyFactorykeyFactory=KeyFactory.getInstance(RSA);PublicKeypublicKey=keyFactory.generatePublic(keySpec);returnpublicKey;}/***使用N、d值還原私鑰**@parammodulus*@paramprivateExponent*@return*@throwsNoSuchAlgorithmException*@throwsInvalidKeySpecException*/publicstaticPrivateKeygetPrivateKey(Stringmodulus,StringprivateExponent)throwsNoSuchAlgorithmException,InvalidKeySpecException{BigIntegerbigIntModulus=newBigInteger(modulus);BigIntegerbigIntPrivateExponent=newBigInteger(privateExponent);RSAPublicKeySpeckeySpec=newRSAPublicKeySpec(bigIntModulus,bigIntPrivateExponent);KeyFactorykeyFactory=KeyFactory.getInstance(RSA);PrivateKeyprivateKey=keyFactory.generatePrivate(keySpec);returnprivateKey;}/***從字符串中加載公鑰**@parampublicKeyStr*公鑰數據字符串*@throwsException*加載公鑰時產生的異常*/publicstaticPublicKeyloadPublicKey(StringpublicKeyStr)throwsException{try{byte[]buffer=Base64Utils.decode(publicKeyStr);KeyFactorykeyFactory=KeyFactory.getInstance(RSA);X509EncodedKeySpeckeySpec=newX509EncodedKeySpec(buffer);return(RSAPublicKey)keyFactory.generatePublic(keySpec);}catch(NoSuchAlgorithmExceptione){thrownewException("無此算法");}catch(InvalidKeySpecExceptione){thrownewException("公鑰非法");}catch(NullPointerExceptione){thrownewException("公鑰數據為空");}}/***從字符串中加載私鑰<br>*加載時使用的是PKCS8EncodedKeySpec(PKCS#8編碼的Key指令)。**@paramprivateKeyStr*@return*@throwsException*/publicstaticPrivateKeyloadPrivateKey(StringprivateKeyStr)throwsException{try{byte[]buffer=Base64Utils.decode(privateKeyStr);//X509EncodedKeySpeckeySpec=newX509EncodedKeySpec(buffer);PKCS8EncodedKeySpeckeySpec=newPKCS8EncodedKeySpec(buffer);KeyFactorykeyFactory=KeyFactory.getInstance(RSA);return(RSAPrivateKey)keyFactory.generatePrivate(keySpec);}catch(NoSuchAithmExceptione){thrownewException("無此算法");}catch(InvalidKeySpecExceptione){thrownewException("私鑰非法");}catch(NullPointerExceptione){thrownewException("私鑰數據為空");}}/***從文件中輸入流中加載公鑰**@paramin*公鑰輸入流*@throwsException*加載公鑰時產生的異常*/publicstaticPublicKeyloadPublicKey(InputStreamin)throwsException{try{returnloadPublicKey(readKey(in));}catch(IOExceptione){thrownewException("公鑰數據流讀取錯誤");}catch(NullPointerExceptione){thrownewException("公鑰輸入流為空");}}/***從文件中加載私鑰**@paramkeyFileName*私鑰文件名*@return是否成功*@throwsException*/publicstaticPrivateKeyloadPrivateKey(InputStreamin)throwsException{try{returnloadPrivateKey(readKey(in));}catch(IOExceptione){thrownewException("私鑰數據讀取錯誤");}catch(NullPointerExceptione){thrownewException("私鑰輸入流為空");}}/***讀取密鑰信息**@paramin*@return*@throwsIOException*/privatestaticStringreadKey(InputStreamin)throwsIOException{BufferedReaderbr=newBufferedReader(newInputStreamReader(in));StringreadLine=null;StringBuildersb=newStringBuilder();while((readLine=br.readLine())!=null){if(readLine.charAt(0)=='-'){continue;}else{sb.append(readLine);sb.append('\r');}}returnsb.toString();}/***打印公鑰信息**@parampublicKey*/publicstaticvoidprintPublicKeyInfo(PublicKeypublicKey){RSAPublicKeyrsaPublicKey=(RSAPublicKey)publicKey;System.out.println("----------RSAPublicKey----------");System.out.println("Modulus.length="+rsaPublicKey.getModulus().bitLength());System.out.println("Modulus="+rsaPublicKey.getModulus().toString());System.out.println("PublicExponent.length="+rsaPublicKey.getPublicExponent().bitLength());System.out.println("PublicExponent="+rsaPublicKey.getPublicExponent().toString());}publicstaticvoidprintPrivateKeyInfo(PrivateKeyprivateKey){RSAPrivateKeyrsaPrivateKey=(RSAPrivateKey)privateKey;System.out.println("----------RSAPrivateKey----------");System.out.println("Modulus.length="+rsaPrivateKey.getModulus().bitLength());System.out.println("Modulus="+rsaPrivateKey.getModulus().toString());System.out.println("PrivateExponent.length="+rsaPrivateKey.getPrivateExponent().bitLength());System.out.println("PrivatecExponent="+rsaPrivateKey.getPrivateExponent().toString());}}上面需要注意的就是加密是有長度限制的,過長的話會拋異常?。?!代碼中有些需要使用Base64再轉換的,而java中不自帶,Android中自帶,所以自己寫出一個來,方便Java后臺使用.Base64Utils工具類:packagecom.example.rsa;importjava.io.UnsupportedEncodingException;publicclassBase64Utils{privatestaticchar[]base64EncodeChars=newchar[]{'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/'};privatestaticbyte[]base64DecodeChars=newbyte[]{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1};/***加密**@paramdata*@return*/publicstaticStringencode(byte[]data){StringBuffersb=newStringBuffer();intlen=data.length;inti=0;intb1,b2,b3;while(i<len){b1=data[i++]&0xff;if(i==len){sb.append(base64EncodeChars[b1>>>2]);sb.append(base64EncodeChars[(b1&0x3)<<4]);sb.append("==");break;}b2=data[i++]&0xff;if(i==len){sb.append(base64EncodeChars[b1>>>2]);sb.append(base64EncodeChars[((b1&0x03)<<4)|((b2&0xf0)>>>4)]);sb.append(base64EncodeChars[(b2&0x0f)<<2]);sb.append("=");break;}b3=data[i++]&0xff;sb.append(base64EncodeChars[b1>>>2]);sb.append(base64EncodeChars[((b1&0x03)<<4)|((b2&0xf0)>>>4)]);sb.append(base64EncodeChars[((b2&0x0f)<<2)|((b3&0xc0)>>>6)]);sb.append(base64EncodeChars[b3&0x3f]);}returnsb.toString();}/***解密**@paramstr*@return*/publicstaticbyte[]decode(Stringstr){try{returndecodePrivate(str);}catch(UnsupportedEncodingExceptione){e.printStackTrace();}returnnewbyte[]{};}privatestaticbyte[]decodePrivate(Stringstr)throwsUnsupportedEncodingException{StringBuffersb=newStringBuffer();byte[]data=null;data=str.getBytes("US-ASCII");intlen=data.length;inti=0;intb1,b2,b3,b4;while(i<len){do{b1=base64DecodeChars[data[i++]];}while(i<len&&b1==-1);if(b1==-1)break;do{b2=base64DecodeChars[data[i++]];}while(i<len&&b2==-1);if(b2==-1)break;sb.append((char)((b1<<2)|((b2&0x30)>>>4)));do{b3=data[i++];if(b3==61)returnsb.toString().getBytes("iso8859-1");b3=base64DecodeChars[b3];}while(i<len&&b3==-1);if(b3==-1)break;sb.append((char)(((b2&0x0f)<<4)|((b3&0x3c)>>>2)));do{b4=data[i++];if(b4==61)returnsb.toString().getBytes("iso8859-1");b4=base64DecodeChars[b4];}while(i<len&&b4==-1);if(b4==-1)break;sb.append((char)(((b3&0x03)<<6)|b4));}returnsb.toString().getBytes("iso8859-1");}}3.終于要開始加密啦:packagecom.example.rsa;importjava.io.InputStream;importjava.security.PrivateKey;importjava.security.PublicKey;importandroid.app.Activity;importandroid.os.Bundle;importandroid.util.Base64;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.EditText;publicclassMainActivityextendsActivityimplementsOnClickListener{privateButtonbtn1,btn2;//加密,解密privateEditTextet1,et2,et3;//需加密的內容,加密后的內容,解密后的內容//注意copy密鑰字符串時,不要有空格.這對密鑰必須是一對privatestaticStringPUCLIC_KEY="公鑰";privatestaticStringPRIVATE_KEY="私鑰";@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}privatevoidinitView(){btn1=(Button)findV

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論