Android中Base64加密

来源:互联网 发布:黑马编程培训机构 编辑:程序博客网 时间:2024/05/17 06:19

最近集成第三方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风格的LFDEFAULT:这个参数是默认,使用默认的方法来加密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;      }  }
0 0
原创粉丝点击