Android中Base64加密

最近集成第三方sdk时需要Basic Authentication认证,在用Base64加密做签权的时候用Base64.DEFAULT一直不能签权成功,最后用Base64.NO_WRAP成功了。 
后来查了一下原因,原来使用Base64.DEFAULT当字符串过长(一般超过76)时会自动在中间加一个换行符,字符串最后也会加一个换行符,这样就导致和其他模块对接时结果不一致,于是签权失败。而Base64.NO_WRAP 这个参数意思是略去所有的换行符,因此签权成功。 
因此Android端使用Base64加密解密时应使用Base64.NO_WRAP。 

其他几种加密解密方式的含义:

CRLF:这个参数看起来比较眼熟,它就是Win风格的换行符,意思就是使用CR LF这一对作为一行的结尾而不是Unix风格的LF

DEFAULT:这个参数是默认,使用默认的方法来加密

NO_PADDING:这个参数是略去加密字符串最后的“=”

NO_WRAP:这个参数意思是略去所有的换行符(设置后CRLF就没用了)

URL_SAFE:这个参数意思是加密时不使用对URL和文件名有特殊意义的字符来作为加密字符,具体就是以-和_取代+和/


加解密代码如下:


public class Base64Utils {
     // 加密  
    public static String getBase64(String str) {  
        String result = "";  
        if( str != null) {
             try {  
                result = new String(Base64.encode(str.getBytes("utf-8"), Base64.NO_WRAP),"utf-8");
             } catch (UnsupportedEncodingException e) {  
                 e.printStackTrace();  
             }  
        }
        return result;  
    }  

    // 解密  
    public static String getFromBase64(String str) {  
        String result = "";  
        if (str != null) {  
            try {
                result = new String(Base64.decode(str, Base64.NO_WRAP), "utf-8");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }  
        }  
        return result;  
    }  
}



转自:http://blog.csdn.net/z191726501/article/details/52778478





展开阅读全文

没有更多推荐了,返回首页