zoukankan      html  css  js  c++  java
  • Base64算法

    为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处。LaplaceDemon/SJQ。

    http://www.cnblogs.com/shijiaqi1066/p/4288372.html

    Base64 算法基本原理

    Base64是一种基于64个可打印字符表示二进制数据的表示方法。

    对字符串的编码效果

        未编码:sjq security base64

        编码后:c2pxIHNlY3VyaXR5IGJhc2U2NA==

    Base64的主要特点就是将二进制数据编码成一段字符串。字符串包括:大小写字母各26个,10个数字,“+”,“/”,一共64个字符,以及“=”等号用于作为后缀。

    由于log264 = 6,所以每6bit为一个“单元”,对应于一个可打印字符。

    例:3 byte = 24 bit = 4 [Base64单元] ,即3个字节需要用4个可打印字符来表示。

    Base64单元值与可打印字符的对应关系,显示如下:

    wps8773.tmp

    当原数据长度不是3的整数倍时,如果最后剩下一个输入数据,在编码结果后加2个“=”;如果最后剩下两个输入数据,编码结果后加1个“=”;如果没有剩下任何数据,就什么都不要加,这样才可以保证数据还原的正确性。

    例:对“Man”进行编码。

    wps8793.tmp

    Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据。包括MIME的email、在XML中存储复杂数据。

    Base64算法可以用于简易的加解密,其本质是使用替换字符的方式对数据进行加密。严格的说,Base64并不是一种加解密算法。

    Java算法实现

    Java中常用3种Base64的实现:

    • JDK
    • Commons Codec
    • Bouncy Castle

    JDK实现

    package sjq.security;
    
    import java.io.IOException;
    
    import sun.misc.BASE64Decoder;
    import sun.misc.BASE64Encoder;
    
    public class JDKBase64 {
        
        private static String src = "sjq security base64";
        
        public static String encoder(String src){
            BASE64Encoder encoder = new BASE64Encoder();
            String encode = encoder.encode(src.getBytes());
            return encode;
        }
        
        public static String decoder(String code){
            BASE64Decoder decoder = new BASE64Decoder();
            byte[] bs = null;
            try {
                bs = decoder.decodeBuffer(code);
            } catch (IOException e) {
                e.printStackTrace();
            }
            return new String(bs);
        }
        
        public static void main(String[] args) {
            String code = encoder(src);
            System.out.println(code);
            
            String src = decoder(code);
            System.out.println(src);
        }
    }

    说明:

    使用Eclipse编写Java代码时,可能找不到BASE64Decoder,BASE64Decoder;只需要在project build path中先移除JRE System Library,再添加库JRE System Library,重新编译后就一切正常了。

    Apache Commons Codec 的实现方式

    package sjq.security;
    
    import org.apache.commons.codec.binary.Base64;
    
    public class CommonCodecBase64 {
    
        private static String src = "sjq security base64";
    
        public static String encoder(String src) {
            byte[] bytes = Base64.encodeBase64(src.getBytes());
            return new String(bytes);
        }
    
        public static String decoder(String code) {
            byte[] bytes = Base64.decodeBase64(code.getBytes());
            return new String(bytes);
        }
    
        public static void main(String[] args) {
            String code = encoder(src);
            System.out.println(code);
    
            String src = decoder(code);
            System.out.println(src);
        }
    }

    Bouncy Castle 的实现方式

    package sjq.security;
    
    import org.bouncycastle.util.encoders.Base64;
    
    public class BouncyCastleBase64 {
    
        private static String src = "sjq security base64";
    
        public static String encoder(String src) {
            byte[] bytes = Base64.encode(src.getBytes());
            return new String(bytes);
        }
    
        public static String decoder(String code) {
            byte[] bytes = Base64.decode(code.getBytes());
            return new String(bytes);
        }
    
        public static void main(String[] args) {
            String code = encoder(src);
            System.out.println(code);
    
            String src = decoder(code);
            System.out.println(src);
        }
    
    }

    说明:

    如果下载不到Bouncy Castle的Jar包,则可以使用MAVEN下载Jar包。

    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-jdk16</artifactId>
        <version>1.46</version>
    </dependency>

    为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处。LaplaceDemon/SJQ。

    http://www.cnblogs.com/shijiaqi1066/p/4288372.html

  • 相关阅读:
    生成器笔记
    迭代器笔记
    hashilib_module
    Ubuntu操作及各种命令笔记
    python正则表达式2
    python正则表达式1
    python文件操作(with关键字)
    python文件操作
    python包
    python模块
  • 原文地址:https://www.cnblogs.com/shijiaqi1066/p/4288372.html
Copyright © 2011-2022 走看看