使用JDK中的安全包对数据进行加解密
来源:互联网 发布:c语言ascii码表 编辑:程序博客网 时间:2024/05/29 09:26
鏈枃浠ヤ娇鐢―ES瀵圭О鍔犲瘑绠楁硶涓轰緥浣跨敤jdk瀵规暟鎹繘琛屽姞瀵嗚В瀵嗐€?/p>
绠楁硶锛堝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涔熸彁渚涜嚜瀹氫箟鐨勫瘑閽?^_^
- 使用JDK中的安全包对数据进行加解密
- 使用JDK中的安全包对数据进行加解密
- 使用JDK中的安全包对数据进行加解密
- 使用JDK中的安全包对数据进行加解密
- 使用JDK中的安全包对数据进行加解密
- 使用JDK中的安全包对数据进行加解密
- 使用 openssl AES RSA 对文件以及数据进行加解密
- 使用 openssl AES RSA 对文件以及数据进行加解密
- Android数据库安全解决方案,使用SQLCipher进行加解密
- Android数据库安全解决方案,使用SQLCipher进行加解密
- Android数据库安全解决方案,使用SQLCipher进行加解密
- Android数据库安全解决方案,使用SQLCipher进行加解密
- Android数据库安全解决方案,使用SQLCipher进行加解密
- Android数据库安全解决方案,使用SQLCipher进行加解密
- Android数据库安全解决方案,使用SQLCipher进行加解密
- android 数据库安全 使用SQLCipher进行加解密
- Android数据库安全解决方案,使用SQLCipher进行加解密
- Android数据库安全解决方案,使用SQLCipher进行加解密
- 通过输入汉字把汉字的头一个字母返回
- openstack cinder中的iscsitarget和tgt
- SVN使用综述
- linux 信号signal实现
- python26 安装pymongo
- 使用JDK中的安全包对数据进行加解密
- linux压缩工具使用(部分)
- 推迟满足感
- SQL Server T-SQL高级查询
- c++ 隐藏
- gentoo安装imagemagick
- 找工作系列之华为机试2013.7.3
- 实用但不常用的linux命令行
- Linux下如何使用USB转串口设备