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

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

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

    Topquan's Blog

    分享價(jià)值----成就你我----我的博客----你的家

    Base64加密算法

    原理:
          Base64 使用US-ASCII子集的64個(gè)字符,即大小寫的26個(gè)英文字母,0-9,+,/。
    編碼總是基于3個(gè)字符,每個(gè)字符用8位二進(jìn)制表示,因此一共24位,再分為4四組,每組6位,表示一個(gè)Base64的值。如下:
    "A", "B", "C", "D", "E", "F", "G", "H", "I","J", "K", "L", "M", "N", "O", "P",
    "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f",
    "g", "h", "i","j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
    "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+", "/"
    Base64值為0就是A,為27的就是b。這樣,每3個(gè)字符產(chǎn)生4位的Base64字符。如果被加密的字符串每3個(gè)一組,還剩1或2個(gè)字符,使用特殊字符"="補(bǔ)齊Base64的4字。

    如,編碼只有2個(gè)字符“me”,m的ascii是109,e的是101,用二進(jìn)制表示分別是01101101、01100101,連接起來就是0110110101100101,再按6位分為一組:011011、010110、010100(不足6位補(bǔ)0),分別ascii分別是27、22、20,即Base64值為bWU,Base64不足4字,用=補(bǔ)齊,因此bWU=就me的Base64值。

    用java的按位邏輯和移位運(yùn)算就可以實(shí)現(xiàn)該算法。但實(shí)際上,并不用我們自己去編程實(shí)現(xiàn)。現(xiàn)有實(shí)現(xiàn)該加密解密算法的程序很多,如javamail的MimeUtility。

    實(shí)踐:javamail的MimeUtility實(shí)現(xiàn)對字符串的加密解密

    第一步,在eclipse新建一個(gè)java項(xiàng)目,并引進(jìn)javamail.jar
    第二步,在com.mascot.encrypt包下創(chuàng)建測試單元,注意引進(jìn)javax.mail.internet.MimeUtility
    package com.mascot.encrypt;

    import java.io.BufferedReader;
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.InputStreamReader;

    import javax.mail.internet.MimeUtility;

    public class Base64 {

      public static BufferedReader decode(String b64string) throws Exception {
        return new BufferedReader(
                new InputStreamReader(
                  MimeUtility.decode(
                      new ByteArrayInputStream(
                        b64string.getBytes()), "base64")));
      }
      public static void main(String args[]) throws Exception{
          System.out.println(encodeAsString("hello"));
          System.out.println(decodeAsString("aGVsbG8="));
          System.out.println(decodeAsString("aGVsbG8A"));
       
      }

      public static String decodeAsString(String b64string) throws Exception {
        if (b64string == null) {
            return b64string;
        }
        String returnString = decode(b64string).readLine();
        if (returnString == null) {
            return returnString;
        }
        return returnString.trim();
      }

      public static ByteArrayOutputStream encode(String plaintext)
            throws Exception {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        byte[] in = plaintext.getBytes();
        ByteArrayOutputStream inStream = new ByteArrayOutputStream();
        inStream.write(in, 0, in.length);
        //補(bǔ)0
        if ((in.length % 3 ) == 1){
            inStream.write(0);
            inStream.write(0);
        } else if((in.length % 3 ) == 2){
            inStream.write(0);
        }
        inStream.writeTo( MimeUtility.encode(out, "base64") );
        return out;
      }

      public static String encodeAsString(String plaintext) throws Exception {
        return encode(plaintext).toString();
      }
    }
    第三步,運(yùn)行程序,結(jié)果:
    aGVsbG8A
    hello
    hello

    注意到hello的加密結(jié)果并不是aGVsbG8=,而是aGVsbG8A,這是因?yàn)槌绦蜓a(bǔ)齊都是補(bǔ)0,而0對應(yīng)的Base64值就是A,這是我們程序?qū)崿F(xiàn)與上述理論不同造成的。

    posted on 2006-10-14 16:21 topquan 閱讀(7725) 評論(0)  編輯  收藏 所屬分類: Classical Arithmetic


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲免费观看在线视频| 精品国产呦系列在线观看免费 | 亚洲桃色AV无码| 思思久久99热免费精品6| 日本成人在线免费观看| 亚洲精品天堂成人片AV在线播放 | 国产成人免费午夜在线观看| 亚洲av不卡一区二区三区| 天黑黑影院在线观看视频高清免费 | 亚洲精品久久无码av片俺去也| 日韩吃奶摸下AA片免费观看| 亚洲男人天堂2018av| 成年女人毛片免费播放人| 亚洲AV无码片一区二区三区| 国产免费资源高清小视频在线观看| 噜噜噜亚洲色成人网站| 亚洲国产精品自产在线播放| 波霸在线精品视频免费观看| 亚洲国产成人精品无码区在线观看| 怡红院免费全部视频在线视频| 久久久综合亚洲色一区二区三区| 99久久精品免费精品国产| 国产精品久久亚洲不卡动漫| 国产又大又长又粗又硬的免费视频| 老司机午夜免费视频| 久久被窝电影亚洲爽爽爽 | 亚洲一级毛片在线播放| 免费高清在线影片一区| 韩国免费A级毛片久久| 亚洲美女在线观看播放| 天天摸夜夜摸成人免费视频 | 亚洲精品午夜国产va久久| 免费人成无码大片在线观看| 中文字幕永久免费| 亚洲成aⅴ人片在线观| 日韩免费视频播放| 成全高清在线观看免费| 色天使亚洲综合在线观看| 亚洲国产成人爱av在线播放| 99精品视频在线免费观看| 亚洲色成人WWW永久在线观看|