この例では、Javase/Javaee/Androidに適したJava暗号化と復号化ツールを共有して、誰もが学習できるようにしています。特定のコンテンツは次のとおりです
パッケージlongshu.utils.security; Import java.lang.Reflect.Method; Import java.security.invalidkeyException; Import java.security.key; import java.security.messagegest; import java.security.nosuchalgorithmexception; import java.security.securerandom; javax.crypto.badpaddingexception; Import javax.crypto.cipher; Import javax.crypto.illegalblocksizeexception; import javax.crypto.keygenerator; Import javax.crypto.nosuchpaddingexception; Import javax.crypto.secretkey; javax.crypto.spec.secretkeyspec; /*** Java暗号化と復号化ツール。 * Javase/Javaee/Androidの両方が適用されます** @author longshu 2016年4月13日*/public class encryptdecrypt {//オブジェクトを作成する必要はありません{}/** source){try {mesagedigest sha1digest = mesagedigest.getInstance( "sha-1"); sha1digest.update(source); byte targetdigest [] = sha1digest.digest();ターゲットディジェストを返します。 } catch(nosuchalgorithmexception e){新しいruntimexception(e); }} / *** sha1暗号化された文字列データ* @param source string to be necrypted* @return暗号文字列* / public static string sha1(string source){return byte2hexstr(sha1bit(source.getbytes()); } / *** md5暗号化ビットデータ* @paramソースバイト配列* @return暗号化されたバイト配列* / public static byte [] md5bit(byte [] source){// md5ダイジェストアルゴリスムのメッセージゲストオブジェクトを取得します。 // Digest Md5digest.update(source)を更新します。 // ciphertextを取得しますmd5digest.digest(); } catch(nosuchalgorithmexception e){新しいruntimexception(e); }} / *** md5暗号化された文字列、32ビット長* @paramソースコンテンツは暗号化されます* @return暗号化されたコンテンツ* / public static string md5(string source){return byte2hexstr(md5bit(source.getbytes()); } / *** base64 encoding* @paramソース文字列をエンコードする* @returnエンコード文字列* / public static string encodebase64(string source){class <?> clazz = null;メソッドencodemethod = null; try {//サードパーティライブラリの優先使用clazz = class.forname( "org.apache.commons.codec.binary.base64"); encodemethod = clazz.getMethod( "encodeBase64"、byte []。class); System.out.println( "encodeBase64->" + clazz); system.out.println( "encodemethod->" + encodemethod); //反射法の静的メソッドは、新しい文字列((byte [])encodemethod.invoke(null、source.getbytes()))を実行するためのオブジェクトを必要としません。 } catch(classNotFoundException e){string vm = system.getProperty( "java.vm.name"); System.out.println(vm); try {if( "dalvik" .equals(vm)){// android clazz = class.forname( "android.util.base64"); // byte [] base64.encode(byte [] input、int flags)encodemethod = clazz.getmethod( "encode"、byte []。class、int.class); System.out.println( "encodeBase64->" + clazz); system.out.println( "encodemethod->" + encodemethod);新しい文字列((byte [])encodemethod.invoke(null、source.getBytes()、0))を返します。 } else {// javase/javaee clazz = class.forname( "sun.misc.base64encoder"); encodemethod = clazz.getMethod( "encode"、byte []。class); System.out.println( "encodeBase64->" + clazz); system.out.println( "encodemethod->" + encodemethod); return(string)encodemethod.invoke(clazz.newinstance()、source.getBytes()); }} catch(classNotFoundException e1){return null; } catch(例外E1){nullを返します。 }} catch(例外e){return null; } / * * android * android.util.base64 * / // return base64.encodetostring(source、base64.default); // new String(base64.encode(source.getBytes()、base64.default))を返します。 / * * Javase/Javaee */// sun.misc.base64encoder // base64encoder encoder = new base64encoder(); // encoder.encode(source.getBytes())を返します。 // org.apache.commons.codec.binary.base64 // return new String(base64.encodeBase64(source.getBytes())); } / *** base64デコード* @param encodeSource encodeSource encodeSource* @return文字列をencoding* / public static string decodebase64(string encodesource){class <?> clazz = null;メソッドdecodemethod = null; try {//サードパーティライブラリの優先使用clazz = class.forname( "org.apache.commons.codec.binary.base64"); decodemethod = clazz.getMethod( "decodeBase64"、byte []。class); System.out.println( "decodeBase64->" + clazz); System.out.println( "decodemethod->" + decodemethod); //オブジェクトなしで反射方法の静的メソッドを実行する新しい文字列((byte [])decodemethod.invoke(null、encodesource.getBytes())); } catch(classNotFoundException e){string vm = system.getProperty( "java.vm.name"); System.out.println(vm); try {if( "dalvik" .equals(vm)){// android clazz = class.forname( "android.util.base64"); // byte [] base64.decode(byte [] input、int flags)decodemethod = clazz.getmethod( "decode"、byte []。class、int.class); System.out.println( "decodeBase64->" + clazz); System.out.println( "decodemethod->" + decodemethod);新しい文字列((byte [])decodemethod.invoke(null、encodesource.getBytes()、0))を返します。 } else {// javase/javaee clazz = class.forname( "sun.misc.base64decoder"); decodemethod = clazz.getMethod( "decodeBuffer"、string.class); System.out.println( "decodeBase64->" + clazz); System.out.println( "decodemethod->" + decodemethod);新しい文字列((byte [])decodemethod.invoke(clazz.newinstance()、encodesource))を返します。 }} catch(classNotFoundException e1){return null; } catch(例外E1){nullを返します。 }} catch(例外e){return null; } / * * android * android.util.base64 * / // return new // string(base64.decode(encodesource.getBytes()、base64.default)); / * * javase/javaee * // sun.misc.base64decoder // try {// base64Decoder decoder = new base64Decoder(); // new String(decoder.decodeBuffer(encodesource))を返します。 //} catch(ioException e){//新しいruntimeexception(e); //} // org.apache.commons.comdec.binary.base64 // return new String(base64.decodebase64(encodesource.getBytes())); }/*** AES暗号化* @paramコンテンツコンテンツは暗号化されます* @paramパスワード暗号化パスワード* @return*/public staticbitaes(] content [] content、string password){try {cipher encryptcipher = cipher.getinstance( "aes/ecb/pkcs5padding"; encryptCipher.init(cipher.encrypt_mode、getKey(password)); // intivilize byte [] result = encryptcipher.dofinal(content);返品結果; // encrypt} catch(nosuchalgorithmexception e){e.printstacktrace(); } catch(nosuchpaddingexception e){e.printstacktrace(); } catch(InvalidKeyException e){e.printstacktrace(); } catch(Illegalblocksizeexcection e){e.printstacktrace(); } catch(badPaddingException e){e.printstacktrace(); } nullを返します。 }/*** aes decrypt* @paramコンテンツコンテンツは解読されますdecryptcipher.init(cipher.decrypt_mode、getKey(password)); // initialize byte [] result = decryptcipher.dofinal(content);返品結果; // resultsの暗号化} catch(invalidKeyException e){e.printstacktrace(); } catch(nosuchalgorithmexception e){e.printstacktrace(); } catch(nosuchpaddingexception e){e.printstacktrace(); } catch(Illegalblocksizeexcection e){e.printstacktrace(); } catch(badPaddingException e){e.printstacktrace(); } nullを返します。 } / *** AES文字列暗号化* @paramコンテンツコンテンツは暗号化されます* @paramパスワード暗号化パスワード* @return* / public static string encryptaes(string content、string password){return byte2hexstr(content.getBites()、パスワード); } / *** aes文字列decryption* @paramコンテンツコンテンツは復号化されます} / ***指定された文字列からキーを生成* @paramパスワードキーを構成する文字列* @return生成キー* @throws nosuchalgorithmexception* / private static key(string password)nosuchalgorithmexception {securerandom securerandom = new securrandom(securerandom securerandom(securerandom(secuer)); // KeyGenerator kgen = keygenerator.getInstance( "aes")を生成します。 kgen.init(128、securerandom); SecretKey SecretKey = kgen.GenereTheKey(); byte [] encodeformat = secretkey.getEncoded(); // key secretkeyspec key = new SecretKeyspec(encodeFormat、 "AES");キーを返します。 } /***バイト配列を16進値を表す文字列に変換します。 *例:byte [] {8,18} to:0812 *およびbyte [] hexstr2bytes(string strin)は相互に可逆的な変換プロセスです。 * @paramバイト変換する必要があるバイト配列* @@returnの変換された文字列*/ public static string byte2hexstr(byte [] bytes){int byteslen = bytes.length; //各バイトは2文字で表されるため、文字列の長さは配列の長さの2倍ですhexString = new StringBuffer(byteslen * 2); for(int i = 0; i <byteslen; i ++){// 0xffで各バイトを実行し、それを小数に変換し、整数によって160個に変換します。 string hex = integer.tohexstring(bytes [i]&0xff); if(hex.length()<2){hexstring.append(0); // 0から1ビットを追加する場合} hexstring.append(hex); } return hexstring.toString(); } /** * hexvaluesを表す文字列をバイト配列に変換します *およびstring byte2hexstr(byte [] bytes)は相互に可逆的な変換プロセスです。 * @param bytes * @return変換されたバイト配列 */ public static byte [] hexstr2bytes(string strin){byte [] arrb = strin.getBytes(); int ilen = arrb.length; // 2つの文字がバイトを表すため、バイト配列の長さは2バイト[] arrout = new byte [ilen / 2]で割られた文字列の長さです。 for(int i = 0; i <ilen; i = i + 2){string strtmp = new String(arrb、i、2); arrout [i / 2] =(byte)integer.parseint(strtmp、16); } return arrout; }}上記はこの記事に関するものです。誰もがJavaプログラミングを学ぶことが役立つことを願っています。