青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

逛奔的蝸牛

我不聰明,但我會很努力

   ::  :: 新隨筆 ::  ::  :: 管理 ::
From: http://blog.csdn.net/noliyo/article/details/9166365@import url(http://m.shnenglu.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);

本文以使用DES對稱加密算法為例使用jdk對數(shù)據(jù)進行加密解密。


首先需要了解Provider類,它是jdk引入的密碼服務(wù)提供者概念,實現(xiàn)了Java安全性的一部分或者全部。Provider 可能實現(xiàn)的服務(wù)包括: 
算法(如DES、RSA、MD5);密鑰的生成、轉(zhuǎn)換和管理。 
通常java運行時環(huán)境至少安裝了一個名字為“SUN”的預(yù)設(shè)Provider,如果查看本機支持的Provider類型可以通過以下代碼:
  1. for(Provider p : Security.getProviders()){  
  2.     System.out.println(p.getName()+":"+p.getInfo());    
  3. }  

我本機運行結(jié)果為:
  1. SUN:SUN (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)  
  2. SunRsaSign:Sun RSA signature provider  
  3. SunJSSE:Sun JSSE provider(PKCS12, SunX509 key/trust factories, SSLv3, TLSv1)  
  4. SunJCE:SunJCE Provider (implements RSA, DES, Triple DES, AES, Blowfish, ARCFOUR, RC2, PBE, Diffie-Hellman, HMAC)  
  5. SunJGSS:Sun (Kerberos v5, SPNEGO)  
  6. SunSASL:Sun SASL provider(implements client mechanisms for: DIGEST-MD5, GSSAPI, EXTERNAL, PLAIN, CRAM-MD5; server mechanisms for: DIGEST-MD5, GSSAPI, CRAM-MD5)  
  7. XMLDSig:XMLDSig (DOM XMLSignatureFactory; DOM KeyInfoFactory)  
  8. SunPCSC:Sun PC/SC provider  
  9. SunMSCAPI:Sun's Microsoft Crypto API provider  
從結(jié)果中可以看到名稱為“SunJCE”的Provider提供DES、Triple DES(即3DES), AES、RSA、Diffie-Hellman等算法的實現(xiàn),下面使用此Provider完成對稱加密。

KeyGenerator類提供(對稱)密鑰生成器的功能,使用getInstance 類方法構(gòu)造,代碼如下:
  1. KeyGenerator kg = KeyGenerator.getInstance("DES","SunJCE");  

SecretKey類是對稱密鑰的封裝類,它不包含方法或常量,其唯一目的是分組對稱密鑰(并為其提供類型安全),從kg中獲取 
  1. SecretKey key = kg.generateKey();  

以上是產(chǎn)生密鑰的過程,真正實現(xiàn)對數(shù)據(jù)加解密功能的類是Cipher,此類為加密和解密提供密碼功能,它構(gòu)成了 Java Cryptographic Extension (JCE) 框架的核心。
為創(chuàng)建 Cipher 對象,應(yīng)用程序調(diào)用 Cipher 的 getInstance 方法并將所請求“轉(zhuǎn)換”的名稱傳遞給它,還可以指定Provider的名稱,本文中采用“SunJCE”。
“轉(zhuǎn)換”是一個字符串,它描述為產(chǎn)生某種輸出而在給定的輸入上執(zhí)行的操作(或一組操作)。轉(zhuǎn)換始終包括加密算法的名稱(例如,DES),后面可能跟有一個反饋模式和填充方案(反饋模式和填充方案可以理解為 加密前對數(shù)據(jù)的預(yù)處理)
“轉(zhuǎn)換”具有以下兩種形式:“算法/模式/填充”或“算法”(這種情況,使用模式和填充方案特定于Provider的默認值)。本例中采用以下有效的轉(zhuǎn)換:
  1. Cipher c = Cipher.getInstance("DES/CBC/PKCS5Padding","SunJCE");//DES加密算法,CBC的反饋模式,PKCS5Padding的填充方案  

使用CBC反饋模式需要一個初始化向量,由類IvParameterSpec來完成,它需要是一個長度為8的byte數(shù)組。


Cipher的init方法負責初始化,初始化需要指定模式和密鑰,密鑰本文采用上面已經(jīng)生成的key,模式有四種ENCRYPT_MODE、DECRYPT_MODE、WRAP_MODE、UNWRAP_MODE分別表示加密、解密、密鑰包裝或密鑰解包。
如果加密則采用方法init(Cipher.ENCRYPT_MODE, key);
如果解密則采用方法init(Cipher.DECRYPT_MODE, key);
WRAP_MODE、UNWRAP_MODE模式是用來實現(xiàn)數(shù)字信封用的,本文不作介紹。
通常對數(shù)據(jù)進行加解密,使用方法doFinal(byte[] input),傳入?yún)?shù)是byte數(shù)組。
為了在http協(xié)議下快速傳輸數(shù)據(jù),且某些系統(tǒng)中只能使用ASCII字符,通常采用Base64編碼。Base64就是用來將非ASCII字符的數(shù)據(jù)轉(zhuǎn)換成ASCII字符的一種方法。還可以提高可視性。

通過以上分析可以得到以下代碼: 
  1. import java.io.IOException;  
  2. import java.io.UnsupportedEncodingException;  
  3. import java.security.InvalidAlgorithmParameterException;  
  4. import java.security.InvalidKeyException;  
  5. import java.security.NoSuchAlgorithmException;  
  6. import java.security.NoSuchProviderException;  
  7. import javax.crypto.BadPaddingException;  
  8. import javax.crypto.Cipher;  
  9. import javax.crypto.IllegalBlockSizeException;  
  10. import javax.crypto.KeyGenerator;  
  11. import javax.crypto.NoSuchPaddingException;  
  12. import javax.crypto.SecretKey;  
  13. import javax.crypto.spec.IvParameterSpec;  
  14. import sun.misc.BASE64Decoder;  
  15. import sun.misc.BASE64Encoder;  
  16.   
  17. public class SecurityTest {  
  18.   
  19.     //密鑰生成器  
  20.     private KeyGenerator kg;   
  21.       
  22.     //對稱密鑰    
  23.     private SecretKey key;    
  24.       
  25.     //加解密時的初始化向量must be 8 bytes long  
  26.     private IvParameterSpec iv;  
  27.       
  28.     //Cipher,加解密主體實例  
  29.     private Cipher c;    
  30.       
  31.     //該構(gòu)造方法初始化DES密鑰和Cipher    
  32.     public SecurityTest() throws NoSuchAlgorithmException, NoSuchProviderException, NoSuchPaddingException, UnsupportedEncodingException{  
  33.         kg = KeyGenerator.getInstance("DES","SunJCE");    
  34.         key = kg.generateKey();  
  35.         iv = new IvParameterSpec("12345678".getBytes("UTF-8"));  
  36.         c = Cipher.getInstance("DES/CBC/PKCS5Padding","SunJCE");//DES加密算法,CBC的反饋模式,PKCS5Padding的填充方案 ,SunJCE:Provider  
  37.     }    
  38.         
  39.     /**  
  40.      * DES加密 
  41.      */    
  42.     public String encrypt(String src) throws InvalidKeyException, IllegalBlockSizeException, BadPaddingException, InvalidAlgorithmParameterException{    
  43.         //初始化-- ENCRYPT_MODE:加密模式, key:密鑰,iv:初始化向量  
  44.         c.init(Cipher.ENCRYPT_MODE, key, iv);    
  45.         byte[] srcByte = src.getBytes();    
  46.         //加密  
  47.         byte[] targetByte = c.doFinal(srcByte);   
  48.         //Base64編碼  
  49.         String targetString = new BASE64Encoder().encode(targetByte);  
  50.         return targetString;    
  51.     }    
  52.     
  53.     /**  
  54.      * DES解密  
  55.      */    
  56.     public String decrypt(String srcString) throws InvalidKeyException, IllegalBlockSizeException, BadPaddingException, IOException, InvalidAlgorithmParameterException {    
  57.         //初始化-- DECRYPT_MODE:解密模式, key:密鑰,iv:初始化向量  
  58.         c.init(Cipher.DECRYPT_MODE, key, iv);   
  59.         //Base64解碼  
  60.         byte[] srcByte = new BASE64Decoder().decodeBuffer(srcString);  
  61.         //解密  
  62.         byte[] targetByte = c.doFinal(srcByte);    
  63.         return new String(targetByte);    
  64.     }    
  65.     
  66.     public static void main(String[] args) throws Exception {    
  67.         SecurityTest test = new SecurityTest();    
  68.         String src = "使用JKD進行加解密--DES算法測試!__小印";    
  69.         System.out.println("原文:" + src);  
  70.         String secret = test.encrypt(src);      
  71.         System.out.println("密文:" + secret);   
  72.         String target = test.decrypt(secret);  
  73.         System.out.println("解密得到原文:" + target);    
  74.     }   

我本機運行結(jié)果為:

  1. 原文:使用JKD進行加解密--DES算法測試!__小印  
  2. 密文:P8Xi4Jfvq9Eus0c1OTE32wK60rjHwPxZ8tRiElxOd5m69+vI37IGtw==  
  3. 解密得到原文:使用JKD進行加解密--DES算法測試!__小印  

注意:本文采用的是隨機密鑰,所以每次運行得到的密文是不一樣的,jdk也提供自定義的密鑰 ^_^
posted on 2013-06-27 08:05 逛奔的蝸牛 閱讀(3430) 評論(0)  編輯 收藏 引用 所屬分類: Java
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区激情小说| 欧美成在线视频| 欧美激情精品久久久久久变态| 亚洲欧美日韩第一区| 亚洲午夜伦理| 午夜精品一区二区三区四区| 亚洲在线观看免费视频| 亚洲女性裸体视频| 久久不射电影网| 免费观看成人www动漫视频| 欧美高清在线观看| 99视频精品免费观看| 亚洲私人影院| 久久精品一区二区| 欧美另类一区二区三区| 国产精品久久97| 精品999日本| 在线视频亚洲| 久久麻豆一区二区| 亚洲精品在线观| 久久精品国产96久久久香蕉| 欧美国产日韩免费| 国产一区亚洲| 一级日韩一区在线观看| 久久精品视频播放| 亚洲日本欧美日韩高观看| 亚洲美女诱惑| 久久综合999| 国产酒店精品激情| 99av国产精品欲麻豆| 久久一二三区| 亚洲特级毛片| 欧美国产激情二区三区| 国产视频精品免费播放| 99亚洲一区二区| 狂野欧美激情性xxxx欧美| 一区二区三区高清在线| 免费观看欧美在线视频的网站| 国产精品视频免费一区| 亚洲精品黄网在线观看| 久久手机精品视频| 亚洲自拍偷拍福利| 欧美日韩另类字幕中文| 亚洲经典视频在线观看| 久久九九热免费视频| 一区二区激情小说| 欧美精品久久久久久久久老牛影院| 国产视频亚洲精品| 亚洲欧美制服中文字幕| 亚洲精品日韩久久| 久久国产婷婷国产香蕉| 一区二区欧美日韩视频| 欧美噜噜久久久xxx| 亚洲高清二区| 欧美xx视频| 久久精品道一区二区三区| 国产精品日韩欧美一区二区| 亚洲一区二区伦理| 一本大道久久a久久精品综合| 久久综合久久综合九色| 国产一区二区三区奇米久涩| 欧美在线视频一区二区| 亚洲欧美bt| 国产区日韩欧美| 欧美在线三级| 亚洲女ⅴideoshd黑人| 国产精品日韩在线一区| 欧美一区三区二区在线观看| 亚洲无人区一区| 国产日韩欧美精品综合| 欧美在线综合视频| 久久精品国产99精品国产亚洲性色 | 亚洲综合色丁香婷婷六月图片| 欧美日本免费一区二区三区| 日韩视频在线一区二区三区| 亚洲人体1000| 欧美日韩精品免费观看视频完整| 亚洲私人影吧| 亚洲视频在线观看| 国产日韩av在线播放| 久久一二三国产| 欧美国产视频在线| 一区二区三区四区五区在线 | 久久九九热免费视频| 性做久久久久久久久| 国内精品伊人久久久久av一坑| 美国成人直播| 欧美激情日韩| 欧美专区第一页| 免费成人av在线| 亚洲一区中文| 久久精品夜色噜噜亚洲a∨| 日韩一级二级三级| 欧美一级黄色网| 一区二区动漫| 久久国产主播精品| 亚洲一区二区三| 久久亚洲不卡| 午夜精品久久久久久久99樱桃| 久久九九99视频| 亚洲一区二区视频在线观看| 久久不见久久见免费视频1| 夜夜嗨av一区二区三区网站四季av| 午夜在线观看免费一区| 99re热精品| 欧美激情亚洲综合一区| 国产精品家庭影院| 亚洲国产一区二区精品专区| 国产免费成人| 99国产麻豆精品| 永久免费视频成人| 亚洲欧美日韩中文在线制服| 亚洲免费不卡| 久久人人97超碰精品888 | 亚洲国产欧美日韩精品| 国产欧美欧美| 99视频超级精品| 亚洲黄一区二区三区| 欧美一区亚洲二区| 亚洲欧美在线网| 欧美日韩日本网| 亚洲国产三级| 在线视频国内自拍亚洲视频| 亚洲欧美视频在线观看| 亚洲一品av免费观看| 欧美精品一区二区三区久久久竹菊 | 久久这里只精品最新地址| 欧美午夜理伦三级在线观看| 老司机aⅴ在线精品导航| 国产伦精品一区二区三区免费迷 | 欧美精品激情blacked18| 久久综合伊人77777蜜臀| 国产精品爽爽ⅴa在线观看| 夜色激情一区二区| 一本大道久久a久久综合婷婷| 麻豆久久久9性大片| 欧美大片免费观看在线观看网站推荐| 国产一区二区三区四区五区美女 | 麻豆精品在线视频| 韩曰欧美视频免费观看| 欧美一区二区三区在线| 久久精品视频一| 狠狠色综合播放一区二区| 久久精品视频网| 欧美成人亚洲| 亚洲精品一区二| 欧美精品一区在线播放| 日韩午夜在线电影| 亚洲一区二区三区免费在线观看| 国产精品扒开腿做爽爽爽视频| 在线亚洲精品| 欧美中文字幕在线| 精久久久久久久久久久| 每日更新成人在线视频| 欧美激情精品| 亚洲综合社区| 伊人激情综合| 欧美成熟视频| 亚洲一区美女视频在线观看免费| 久久国产一区二区三区| 国内精品久久久久影院薰衣草| 久久精品视频在线观看| 亚洲人www| 韩国一区二区三区美女美女秀| 久久久久国产精品一区| 亚洲人人精品| 久久精品成人| 9i看片成人免费高清| 国产欧美视频一区二区三区| 久久久久久久97| 日韩视频一区二区三区在线播放免费观看 | 国产精品久久久久久久久久久久 | 国产婷婷成人久久av免费高清 | 国产精品毛片在线看| 性欧美1819性猛交| 亚洲第一黄色| 欧美一级在线视频| 亚洲激情不卡| 国产精品一香蕉国产线看观看| 久久一区精品| 亚洲一级免费视频| 亚洲成人在线免费| 欧美+亚洲+精品+三区| 日韩视频免费观看高清完整版| 久久激情一区| 一本色道久久综合亚洲二区三区| 国产精品一区二区欧美| 欧美va天堂在线| 亚洲欧美国产高清| 亚洲精品免费观看| 欧美/亚洲一区| 久久精品国产久精国产思思| 亚洲手机成人高清视频| 亚洲国产欧美日韩精品| 狠狠色丁香婷婷综合| 国产精品中文字幕在线观看| 欧美日韩一区二区三区免费| 欧美mv日韩mv国产网站app| 久久国产精品网站| 香蕉精品999视频一区二区|