<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-4  評論-1  文章-0  trackbacks-0

    1.DES算法的

         DES算法的介紹和相關(guān)說明我就不講了,大家可以自己google,要了解的就是DES算法屬于塊加密算法,通常是64位為一塊來進(jìn)行加密,因此就這會涉及到塊填充的問題。所以如果是異構(gòu)系統(tǒng)間的通訊,一定要問清楚大家的塊填充方式,當(dāng)然最好就是要加密的明文剛好是64位的倍數(shù),這樣雙方都不用填充。另外DES算法加密后不會改變長度
          我自己下的DESUtil如下

     

     1    private static final String TDESAlgorithm = "TripleDES"
     2    private static final String DESAlgorithm = "DES/ECB/NoPadding"
     3    /**
     4     * ECB模式和NoPadding填充的DES加密函數(shù)。
     5     * @param src - 明文
     6     * @param sKeyByte - 密鑰
     7     * @return encryptByte - 密文
     8     */

     9    public static byte[] encryptWithDES(byte[] src,byte[] sKeyByte){
    10        try {
    11            Cipher myCipher = Cipher.getInstance(DESAlgorithm);
    12            SecretKey sKey = new SecretKeySpec(sKeyByte,"DES");
    13            myCipher.init(Cipher.ENCRYPT_MODE, sKey);
    14            byte[] encryptByte = myCipher.doFinal(src);
    15            return encryptByte;
    16        }
     catch (NoSuchAlgorithmException e) {
    17            e.printStackTrace();
    18        }
     catch (NoSuchPaddingException e) {
    19            e.printStackTrace();
    20        }
     catch (InvalidKeyException e) {
    21            e.printStackTrace();
    22        }
     catch (IllegalBlockSizeException e) {
    23            e.printStackTrace();
    24        }
     catch (BadPaddingException e) {
    25            e.printStackTrace();
    26        }

    27        return null;        
    28    }

    29    
    30    /**
    31     * ECB模式和NoPadding填充的DES解密函數(shù)。
    32     * @param src - 密文
    33     * @param sKeyByte - 密鑰
    34     * @return decryptByte - 明文
    35     */

    36    public static byte[] decryptWithDES(byte[] src,byte[] sKeyByte){
    37        try {
    38            Cipher myCipher = Cipher.getInstance(DESAlgorithm);
    39            SecretKey sKey = new SecretKeySpec(sKeyByte,"DES");
    40            myCipher.init(Cipher.DECRYPT_MODE, sKey);
    41            byte[] decryptByte = myCipher.doFinal(src);
    42            return decryptByte;
    43        }
     catch (NoSuchAlgorithmException e) {
    44            e.printStackTrace();
    45        }
     catch (NoSuchPaddingException e) {
    46            e.printStackTrace();
    47        }
     catch (InvalidKeyException e) {
    48            e.printStackTrace();
    49        }
     catch (IllegalBlockSizeException e) {
    50            e.printStackTrace();
    51        }
     catch (BadPaddingException e) {
    52            e.printStackTrace();
    53        }

    54        return null;        
    55    }


     

    2.RSA算法

        相對DES算法,RSA算法是比較復(fù)雜的了,說復(fù)雜是因?yàn)樵诋悩?gòu)系統(tǒng)之間的兼容性差一點(diǎn)。具體介紹也不說了,RSA算法需要注意的是
       The RSA algorithm can only encrypt data that has a maximum byte length of the RSA key length in bits divided with eight minus eleven padding bytes, i.e. number of maximum bytes = key length in bits / 8 - 11. In your case it means 2048 / 8 - 11 = 245. If you want to encrypt larger data, then use a larger key, for example, a key with 4096 bits will allow you to encrypt 501 bytes of data.   也就是密文長度和密鑰長度之間的一個(gè)關(guān)系,否則也會導(dǎo)致加密失敗。RSA算法加密后會改變長度

       RSA中另外一個(gè)關(guān)鍵的概念是 模,公用指數(shù)和私鑰的關(guān)系
    模和公用指數(shù)生成公鑰,Java中的公用指數(shù)有自定義的兩個(gè)RSAKeyGenParameterSpec.F1和RSAKeyGenParameterSpec.F4
    生成公鑰key的方式為

    RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(modulus, RSAKeyGenParameterSpec.F4);
        RSAPublicKey pubKey 
    = (RSAPublicKey)keyFactory.generatePublic(pubKeySpec);


    模和私鑰指數(shù)生成私鑰,方式為

    RSAPrivateKeySpec privKeySpec = new RSAPrivateKeySpec(modulus,prikeyInteger);
            RSAPrivateKey privKey 
    = (RSAPrivateKey)keyFactory.generatePrivate(privKeySpec);


    這些參數(shù)都是以BigInteger的方式傳入的,具體可以參看BigInteger的構(gòu)造函數(shù),其中有一個(gè)常用的是

    BigInteger bint = new BigInteger(String str,int radix)


    用途是把str按照radix進(jìn)制來解析,非常方便。Integer也有這種類似的方法,所以十六進(jìn)制和十進(jìn)制的轉(zhuǎn)換也可以用這個(gè)方式變相實(shí)現(xiàn)。

    Java里邊有兩本書對加密解密說的比較詳細(xì),個(gè)人認(rèn)為還不錯(cuò)。

    Java的RSA中需要特別注意的是,java沒有無符號數(shù)這個(gè)概念,所以有的時(shí)候要特別注意密鑰,模的正負(fù)關(guān)系

    Beginning Cryptography with Java
    Core Security Patterns: Best Practices and Strategies for J2EE(TM), Web Services, and Identity Management (Core Series)》(中文名:《安全模式--J2EE、WEB服務(wù)和身份管理最佳實(shí)踐與策略》)

    posted on 2007-07-20 14:47 Caixiaopig 閱讀(1189) 評論(0)  編輯  收藏 所屬分類: Java高級

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 一级毛片aaaaaa视频免费看| 日本在线免费观看| 亚洲人成色777777在线观看| 99蜜桃在线观看免费视频网站| 亚洲中文字幕无码av| 亚洲人成网站色在线入口| 99精品一区二区免费视频| 亚洲国产成人手机在线观看| 国产成人亚洲精品青草天美| 亚洲人成网站免费播放| 一级毛片aaaaaa视频免费看| 亚洲成人免费网站| 亚洲综合色区在线观看| 妻子5免费完整高清电视| 一级毛片视频免费| 狠狠色香婷婷久久亚洲精品| 国产成人毛片亚洲精品| 免费无码A片一区二三区| 成av免费大片黄在线观看| 亚洲综合欧美色五月俺也去| 亚洲人成77777在线播放网站| 最近中文字幕mv免费高清视频7| 两个人www免费高清视频| 亚洲乱亚洲乱妇无码| 色婷婷六月亚洲婷婷丁香| 日产国产精品亚洲系列| 一色屋成人免费精品网站| 成人网站免费大全日韩国产| 日韩欧美亚洲国产精品字幕久久久| 久久久无码精品亚洲日韩蜜臀浪潮| 亚洲人成无码www久久久| 无限动漫网在线观看免费| 精品国产一区二区三区免费| 免费看黄福利app导航看一下黄色录像 | 中文字幕成人免费高清在线视频| 国产亚洲中文日本不卡二区| 亚洲一二成人精品区| 久久久久亚洲av成人无码电影 | 久久九九免费高清视频| 亚洲第一成年网站视频| 亚洲天堂一区二区三区|