赞
踩
定义:
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。(再加上作为垫字的"=",实际上是65个字符)
编码规则:
转换表:
转自 https://baike.baidu.com/item/base64/8545775?fr=aladdin
编码方式和解码方式:
默认的编码方式 Base64.DEFAULT:当字符串超过76时会自动在中间加一个换行符,字符串最后也会加一个换行符
Base64.CRLF:Win风格的换行符,意思就是使用CR LF这一对作为一行的结尾而不是Unix风格的LF
Base64.NO_PADDING:这个参数是略去编码字符串最后的“=”
Base64.NO_WRAP:这个参数意思是略去所有的换行符(设置后CRLF就没用了)
Base64.NO_WRAP:这个参数意思是编码时不使用对URL和文件名有特殊意义的字符来作为编码字符,具体就是以-和_取代+和/
文本大小:
因为,Base64将三个字节转化成四个字节,因此Base64编码后的文本,会比原文本大出三分之一左右。
一般Android不会使用默认的Base64编码方式,这样会让IOS和Android不统一,而是使用 Base64.NO_WRAP
/** * encodeBase64File:(将文件转成base64 字符串). * * @param path 文件路径 * @return * @throws Exception */ public static String encodeBase64File(String path) throws Exception { File file = new File(path); FileInputStream inputFile = new FileInputStream(file); byte[] buffer = new byte[(int) file.length()]; inputFile.read(buffer); inputFile.close(); return Base64.encodeToString(buffer, Base64.NO_WRAP); } /** * decoderBase64File:(将base64字符解码保存文件). * * @param base64Code 编码后的字串 * @param savePath 文件保存路径 * @throws Exception */ public static void decoderBase64File(String base64Code, String savePath) throws Exception { byte[] buffer = Base64.decode(base64Code, Base64.NO_WRAP); FileOutputStream out = new FileOutputStream(savePath); out.write(buffer); out.close(); }
MD5 (Message Digest Algorithm 5) 是一种常见的加密算法,用于将任意长度的数据计算出一个固定长度的摘要(或称为哈希值、消息摘要、指纹),通常为 128 位(16 字节)。
MD5 算法的原理是将数据分为若干个块,每个块的大小为 512 位(64 字节),对每个块进行计算,最后将每个块的计算结果合并起来得到最终的 MD5 值。计算过程中涉及到一些位运算、逻辑运算和循环移位操作,使得即使输入数据仅发生微小的改动,最终的 MD5 值也会发生很大的变化。
MD5 算法的应用非常广泛,例如在密码存储、数字签名、消息认证等方面都有应用。但是,由于 MD5 算法存在一些安全性问题,如碰撞攻击,因此在一些场合下已经被更安全的哈希算法所替代,如 SHA-256、SHA-3 等。
public static String md5(String s) { char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; try { byte[] btInput = s.getBytes(); // 获得MD5摘要算法的 MessageDigest 对象 如果输入“SHA”,就是实现SHA加密 MessageDigest mdInst = MessageDigest.getInstance("MD5"); // 使用指定的字节更新摘要 mdInst.update(btInput); // 获得密文 byte[] md = mdInst.digest(); // 把密文转换成十六进制的字符串形式 int j = md.length; char str[] = new char[j * 2]; int k = 0; for (int i = 0; i < j; i++) { byte byte0 = md[i]; str[k++] = hexDigits[byte0 >>> 4 & 0xf]; str[k++] = hexDigits[byte0 & 0xf]; } return new String(str); } catch (Exception e) { e.printStackTrace(); return null; } }
三方封装工具类
注意:其中的 MD5 加密后,未转成 16 进制,需要自己转
fun loginDfsk(phone: String, password: String) { request( { dfskService.login( ReqLogin( phone, EncodeUtils.base64Encode2String( bytesToHexString( EncryptUtils.encryptMD5(password.toByteArray()) ).toByteArray() ) ) ) }, loginResultDfsk, true, "登录中..." ) } fun bytesToHexString(var0: ByteArray): String { val var1 = StringBuilder() for (var2 in var0.indices) { val var3 = Integer.toHexString(255 and var0[var2].toInt()) if (var3.length == 1) { var1.append('0') } var1.append(var3) } return var1.toString() }
百度 base64:https://baike.baidu.com/item/base64/8545775?fr=aladdin
编码之Base64编码:https://www.shuzhiduo.com/A/lk5aPNnoJ1/
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。