• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

密码学-02-Base64

android 搞代码 4年前 (2022-03-01) 12次浏览 已收录 0个评论

1. 简述:

Base64是一种用64个字符示意任意二进制数据的办法。它是一种编码,而非加密
A-Z a-z 0-9 + / =

2. 改编

  • 在url 传输应用的码表中, + / 被 – _ 代替。 因为后端接管到 + ,会成为 空字符串。
  • 相似Hexbin编码,通过批改码表,能够生成变种base64

    3. Base64的利用

    RSA密钥、加密后的密文、图片等数据中,会有一些不可见字符。间接转成文本传输的话,会有乱码、数据谬误、数据失落等状况呈现,就能够应用Base64编码

4. Base64的代码实现和码表

  • java

    public static void main(String[] args) {
        String name = "横笛";
        byte[] bytes = name.getBytes(StandardCharsets.UTF_8);
        String encode = Base64.getEncoder().encodeToString(bytes);
        byte[]  encode1 = Base64.getEncoder().encode(bytes);
        System.out.println(encode);
        System.out.println(new String(encode1));
    }
  • Android

    String name1 = "横笛";
    //  okio.Base64 encode
    ByteString byteString1 = ByteString.of(name1.getBytes(StandardCharsets.UTF_8));
    String encode1 = byteString1.base64();
    System.out.println("okhttp3:" + encode1);
    // java.util.Base64
    // 这里是因为对Android版本有要求 
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
      String string2 = Base64.getEncoder().encodeToString(name1.getBytes(StandardCharsets.UTF_8));
      byte[] string3 = Base64.getEncoder().encode(name1.getBytes(StandardCharsets.UTF_8));
      System.out.println("java- utils:"+string2);
      System.out.println("java- utils:"+ Arrays.toString(string3));
          }
    // android.util.Base64
    String string4 = android.util.Base64.encodeToString(name1.getBytes(StandardCharsets.UTF_8),0);
    byte[]  string5 = android.util.Base64.encode(name1.getBytes(StandardCharsets.UTF_8),0);
    System.out.println("android.util.Base64:"+string4);
    System.out.println("android.util.Base64:"+new String(string5));

    5. Base64编码细节

    每个Base64字符代表原数据中的6bit
    Base64编码后的字符数,是4的倍数
    编码的字节数是3的倍数时,不须要填充

6. Base64编码的特点

a) Base64编码是编码,不是压缩,编码后只会减少字节数
b) 算法可逆, 解码很不便, 不用于私密信息通信
c) 规范的Base64每行为76个字符,行末增加换行符
d) 加密后的字符串只有65种字符, 不可打印字符也可传输
e) 在Java层能够通过hook对应办法名来疾速定位要害代码
f) 在so层能够通过输入输出的数据和码表来确定算法


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:密码学-02-Base64
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址