使用JDK中的安全包对数据进行加解密

来源:互联网 发布:c语言ascii码表 编辑:程序博客网 时间:2024/05/29 09:26

鏈枃浠ヤ娇鐢―ES瀵圭О鍔犲瘑绠楁硶涓轰緥浣跨敤jdk瀵规暟鎹繘琛屽姞瀵嗚В瀵嗐€?/p>


棣栧厛闇€瑕佷簡瑙rovider绫伙紝瀹冩槸jdk寮曞叆鐨勫瘑鐮佹湇鍔℃彁渚涜€呮蹇碉紝瀹炵幇浜咼ava瀹夊叏鎬х殑涓€閮ㄥ垎鎴栬€呭叏閮ㄣ€侾rovider 鍙兘瀹炵幇鐨勬湇鍔″寘鎷細
绠楁硶锛堝DES銆丷SA銆丮D5锛夛紱瀵嗛挜鐨勭敓鎴愩€佽浆鎹㈠拰绠$悊銆?
閫氬父java杩愯鏃剁幆澧冭嚦灏戝畨瑁呬簡涓€涓悕瀛椾负鈥淪UN鈥濈殑棰勮Provider锛屽鏋滄煡鐪嬫湰鏈烘敮鎸佺殑Provider绫诲瀷鍙互閫氳繃浠ヤ笅浠g爜锛?br>
        for(Provider p : Security.getProviders()){            System.out.println(p.getName()+"锛?quot;+p.getInfo());          }

鎴戞湰鏈鸿繍琛岀粨鏋滀负锛?br>
SUN锛歋UN (DSA key/parameter generation; DSA signing; SHA-1, MD5 digests; SecureRandom; X.509 certificates; JKS keystore; PKIX CertPathValidator; PKIX CertPathBuilder; LDAP, Collection CertStores, JavaPolicy Policy; JavaLoginConfig Configuration)SunRsaSign锛歋un RSA signature providerSunJSSE锛歋un JSSE provider(PKCS12, SunX509 key/trust factories, SSLv3, TLSv1)SunJCE锛歋unJCE Provider (implements RSA, DES, Triple DES, AES, Blowfish, ARCFOUR, RC2, PBE, Diffie-Hellman, HMAC)SunJGSS锛歋un (Kerberos v5, SPNEGO)SunSASL锛歋un SASL provider(implements client mechanisms for: DIGEST-MD5, GSSAPI, EXTERNAL, PLAIN, CRAM-MD5; server mechanisms for: DIGEST-MD5, GSSAPI, CRAM-MD5)XMLDSig锛歑MLDSig (DOM XMLSignatureFactory; DOM KeyInfoFactory)SunPCSC锛歋un PC/SC providerSunMSCAPI锛歋un's Microsoft Crypto API provider
浠庣粨鏋滀腑鍙互鐪嬪埌鍚嶇О涓衡€淪unJCE鈥濈殑Provider鎻愪緵DES銆乀riple DES锛堝嵆3DES锛? AES銆丷SA銆丏iffie-Hellman绛夌畻娉曠殑瀹炵幇锛屼笅闈娇鐢ㄦProvider瀹屾垚瀵圭О鍔犲瘑銆?br>
KeyGenerator绫绘彁渚涳紙瀵圭О锛夊瘑閽ョ敓鎴愬櫒鐨勫姛鑳斤紝浣跨敤getInstance 绫绘柟娉曟瀯閫狅紝浠g爜濡備笅锛?br>
KeyGenerator kg = KeyGenerator.getInstance("DES","SunJCE");

SecretKey绫绘槸瀵圭О瀵嗛挜鐨勫皝瑁呯被锛屽畠涓嶅寘鍚柟娉曟垨甯搁噺锛屽叾鍞竴鐩殑鏄垎缁勫绉板瘑閽ワ紙骞朵负鍏舵彁渚涚被鍨嬪畨鍏級锛屼粠kg涓幏鍙?
SecretKey key = kg.generateKey();

浠ヤ笂鏄骇鐢熷瘑閽ョ殑杩囩▼锛岀湡姝e疄鐜板鏁版嵁鍔犺В瀵嗗姛鑳界殑绫绘槸Cipher锛屾绫讳负鍔犲瘑鍜岃В瀵嗘彁渚涘瘑鐮佸姛鑳斤紝瀹冩瀯鎴愪簡 Java Cryptographic Extension (JCE) 妗嗘灦鐨勬牳蹇冦€?br> 涓哄垱寤?Cipher 瀵硅薄锛屽簲鐢ㄧ▼搴忚皟鐢?Cipher 鐨?getInstance 鏂规硶骞跺皢鎵€璇锋眰鈥滆浆鎹⑩€濈殑鍚嶇О浼犻€掔粰瀹冿紝杩樺彲浠ユ寚瀹歅rovider鐨勫悕绉帮紝鏈枃涓噰鐢ㄢ€淪unJCE鈥濄€?br> 鈥滆浆鎹⑩€濇槸涓€涓瓧绗︿覆锛屽畠鎻忚堪涓轰骇鐢熸煇绉嶈緭鍑鸿€屽湪缁欏畾鐨勮緭鍏ヤ笂鎵ц鐨勬搷浣滐紙鎴栦竴缁勬搷浣滐級銆傝浆鎹㈠缁堝寘鎷姞瀵嗙畻娉曠殑鍚嶇О锛堜緥濡傦紝DES锛夛紝鍚庨潰鍙兘璺熸湁涓€涓弽棣堟ā寮忓拰濉厖鏂规锛堝弽棣堟ā寮忓拰濉厖鏂规鍙互鐞嗚В涓?鍔犲瘑鍓嶅鏁版嵁鐨勯澶勭悊锛?br> 鈥滆浆鎹⑩€濆叿鏈変互涓嬩袱绉嶅舰寮忥細鈥滅畻娉?妯″紡/濉厖鈥濇垨鈥滅畻娉曗€濓紙杩欑鎯呭喌锛屼娇鐢ㄦā寮忓拰濉厖鏂规鐗瑰畾浜嶱rovider鐨勯粯璁?#20540;锛夈€傛湰渚嬩腑閲囩敤浠ヤ笅鏈夋晥鐨勮浆鎹細
Cipher c = Cipher.getInstance("DES/CBC/PKCS5Padding","SunJCE");//DES鍔犲瘑绠楁硶锛孋BC鐨勫弽棣堟ā寮忥紝PKCS5Padding鐨勫~鍏呮柟妗?/pre>

浣跨敤CBC鍙嶉妯″紡闇€瑕佷竴涓垵濮嬪寲鍚戦噺锛岀敱绫籌vParameterSpec鏉ュ畬鎴愶紝瀹冮渶瑕佹槸涓€涓暱搴︿负8鐨刡yte鏁扮粍銆?br>


Cipher鐨刬nit鏂规硶璐熻矗鍒濆鍖栵紝鍒濆鍖栭渶瑕佹寚瀹氭ā寮忓拰瀵嗛挜锛屽瘑閽ユ湰鏂囬噰鐢ㄤ笂闈㈠凡缁忕敓鎴愮殑key锛屾ā寮忔湁鍥涚ENCRYPT_MODE銆丏ECRYPT_MODE銆乄RAP_MODE銆乁NWRAP_MODE鍒嗗埆琛ㄧず鍔犲瘑銆佽В瀵嗐€佸瘑閽ュ寘瑁呮垨瀵嗛挜瑙e寘銆?br>濡傛灉鍔犲瘑鍒欓噰鐢ㄦ柟娉昳nit(Cipher.ENCRYPT_MODE, key)锛?br>濡傛灉瑙e瘑鍒欓噰鐢ㄦ柟娉昳nit(Cipher.DECRYPT_MODE, key)锛?br>WRAP_MODE銆乁NWRAP_MODE妯″紡鏄敤鏉ュ疄鐜版暟瀛椾俊灏佺敤鐨勶紝鏈枃涓嶄綔浠嬬粛銆?br>閫氬父瀵规暟鎹繘琛屽姞瑙e瘑锛屼娇鐢ㄦ柟娉昫oFinal(byte[] input)锛屼紶鍏ュ弬鏁版槸byte鏁扮粍銆?br>涓轰簡鍦╤ttp鍗忚涓嬪揩閫熶紶杈撴暟鎹紝涓旀煇浜涚郴缁熶腑鍙兘浣跨敤ASCII瀛楃锛岄€氬父閲囩敤Base64缂栫爜銆侭ase64灏辨槸鐢ㄦ潵灏嗛潪ASCII瀛楃鐨勬暟鎹浆鎹㈡垚ASCII瀛楃鐨勪竴绉嶆柟娉曘€傝繕鍙互鎻愰珮鍙鎬с€?br>
閫氳繃浠ヤ笂鍒嗘瀽鍙互寰楀埌浠ヤ笅浠g爜锛?
import java.io.IOException;import java.io.UnsupportedEncodingException;import java.security.InvalidAlgorithmParameterException;import java.security.InvalidKeyException;import java.security.NoSuchAlgorithmException;import java.security.NoSuchProviderException;import javax.crypto.BadPaddingException;import javax.crypto.Cipher;import javax.crypto.IllegalBlockSizeException;import javax.crypto.KeyGenerator;import javax.crypto.NoSuchPaddingException;import javax.crypto.SecretKey;import javax.crypto.spec.IvParameterSpec;import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;public class SecurityTest {    //瀵嗛挜鐢熸垚鍣?    private KeyGenerator kg;         //瀵圭О瀵嗛挜      private SecretKey key;          //鍔犺В瀵嗘椂鐨勫垵濮嬪寲鍚戦噺must be 8 bytes long    private IvParameterSpec iv;        //Cipher,鍔犺В瀵嗕富浣撳疄渚?    private Cipher c;          //璇ユ瀯閫犳柟娉曞垵濮嬪寲DES瀵嗛挜鍜孋ipher      public SecurityTest() throws NoSuchAlgorithmException, NoSuchProviderException, NoSuchPaddingException, UnsupportedEncodingException{        kg = KeyGenerator.getInstance("DES","SunJCE");          key = kg.generateKey();        iv = new IvParameterSpec("12345678".getBytes("UTF-8"));        c = Cipher.getInstance("DES/CBC/PKCS5Padding","SunJCE");//DES鍔犲瘑绠楁硶锛孋BC鐨勫弽棣堟ā寮忥紝PKCS5Padding鐨勫~鍏呮柟妗?锛孲unJCE锛歅rovider    }            /**      * DES鍔犲瘑     */      public String encrypt(String src) throws InvalidKeyException, IllegalBlockSizeException, BadPaddingException, InvalidAlgorithmParameterException{          //鍒濆鍖?- ENCRYPT_MODE锛氬姞瀵嗘ā寮忥紝 key锛氬瘑閽ワ紝iv锛氬垵濮嬪寲鍚戦噺        c.init(Cipher.ENCRYPT_MODE, key, iv);          byte[] srcByte = src.getBytes();          //鍔犲瘑        byte[] targetByte = c.doFinal(srcByte);         //Base64缂栫爜        String targetString = new BASE64Encoder().encode(targetByte);        return targetString;      }        /**      * DES瑙e瘑      */      public String decrypt(String srcString) throws InvalidKeyException, IllegalBlockSizeException, BadPaddingException, IOException, InvalidAlgorithmParameterException {          //鍒濆鍖?- DECRYPT_MODE锛氳В瀵嗘ā寮忥紝 key锛氬瘑閽ワ紝iv锛氬垵濮嬪寲鍚戦噺        c.init(Cipher.DECRYPT_MODE, key, iv);         //Base64瑙g爜        byte[] srcByte = new BASE64Decoder().decodeBuffer(srcString);        //瑙e瘑        byte[] targetByte = c.doFinal(srcByte);          return new String(targetByte);      }        public static void main(String[] args) throws Exception {          SecurityTest test = new SecurityTest();          String src = "浣跨敤JKD杩涜鍔犺В瀵?-DES绠楁硶娴嬭瘯锛乢_灏忓嵃";          System.out.println("鍘熸枃:" + src);        String secret = test.encrypt(src);            System.out.println("瀵嗘枃:" + secret);         String target = test.decrypt(secret);        System.out.println("瑙e瘑寰楀埌鍘熸枃:" + target);      } 

鎴戞湰鏈鸿繍琛岀粨鏋滀负锛?/p>

鍘熸枃:浣跨敤JKD杩涜鍔犺В瀵?-DES绠楁硶娴嬭瘯锛乢_灏忓嵃瀵嗘枃:P8Xi4Jfvq9Eus0c1OTE32wK60rjHwPxZ8tRiElxOd5m69+vI37IGtw==瑙e瘑寰楀埌鍘熸枃:浣跨敤JKD杩涜鍔犺В瀵?-DES绠楁硶娴嬭瘯锛乢_灏忓嵃

娉ㄦ剰锛氭湰鏂囬噰鐢ㄧ殑鏄殢鏈哄瘑閽ワ紝鎵€浠ユ瘡娆¤繍琛屽緱鍒扮殑瀵嗘枃鏄笉涓€鏍风殑锛宩dk涔熸彁渚涜嚜瀹氫箟鐨勫瘑閽?^_^

原创粉丝点击