美文网首页Android开发程序员Android开发
Android进阶开发 - 编码,加密,Hash

Android进阶开发 - 编码,加密,Hash

作者: Android架构 | 来源:发表于2019-05-10 16:21 被阅读14次

    涉及内容:

    编码解码 Encoding & Decoding

    加密解密 Encryption & Decryption

    数字签名 Digital Signature

    压缩与解压缩 Compression & Decompression

    序列化 Serialization

    哈希 Hash

    字符集 Charset

    对称加密

    原理:使用密钥和加密算法对数据进行转换,得到的无意义数据即为密文;使用密钥和解密算法对密文进行逆向转换,得到原数据.
    经典算法:DES,AES

    非对称加密

    原理:使用公钥对数据进行加密得到密文;使用私钥对数据进行解密得到原数据
    延伸用途: 数字签名
    经典算法:RSA,DSA

    数字签名

    如上图,其实并不能验证公钥解密后的数据就是私钥签名后的原数据,所以保险起见还可以用下面一种方式进行签名和验证

    加密+签名,用来更加安全的数据传输

    编码

    Base64
    • 将二进制数据转换成由64个字符组成的字符串的编码算法
      通常asc2编码中8位为一个符号,但是base64为了字符一定是字符,所有每6位对应一个字符.
    • 什么是二进制数据?
      非文本数据就是二进制数据
    • 用途
      • 让原数据具有字符串所具有的特性,如可以放在URL中传输,可以保存到文本文件,可以通过普通的聊天软件进行文本传输.
      • 把原本人眼可以读懂的字符串变成读不懂的字符串,降低偷窥风险
        *变种: Base58
    URL encoding

    压缩与解压缩

    • 压缩: 把数据换一种方式来存储,以减小存储空间
    • 解压缩: 把压缩后的数据还原成原先的形式,以便使用
    • 常见的压缩算法: DELETE,JPEG,MP3

    序列化

    • 序列化: 把数据对象(一般是内存中的,例如JVM中的对象)转换成字节序列的过程
    • 反序列化: 把字节序列重新转换成内存中的对象
    • 目的:让内存中的对象可以被存储和传输

    Hash

    • 定义: 把任意数据转换成指定大小范围(通常很小)的数据
    • 作用:摘要,数字指纹
    • 经典算法:MD5, SHA1, SHA256等
    • 实际用途:
      • 数据完整性验证
      • 快速查找:hashCode()和HashMap
      • 隐私保护

    Hash是加密吗?据说MD5是不可逆加密?
    不是加密,因为没有解密.
    最终通过学习hash过程后的签名验证流程

    字符集

    • 含义:一个由整数向现实世界中的文字符号的Map
    • 分之
      • ASC2: 128 个字符,1字节
      • ISO-8859-1: 对ASC2进行扩充,1字节
      • Unicode: 13万个字符,多字节
        • UTF-8 : Unicode的编码分支
        • UTF-16 : Unicode的编码分支
      • GBK/GB2312/GB18030: 中国自研标准,多字节,字符集+编码

    自己是从事了七年开发的Android工程师,不少人私下问我,2019年Android进阶该怎么学,方法有没有?

    没错,年初我花了一个多月的时间整理出来的学习资料,希望能帮助那些想进阶提升Android开发,却又不知道怎么进阶学习的朋友。【包括高级UI、性能优化、架构师课程、NDK、Kotlin、混合式开发(ReactNative+Weex)、Flutter等架构技术资料】,希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

    资料获取方式:加入Android架构交流QQ群聊:513088520 ,进群即领取资料!!!

    点击链接加入群聊【Android移动架构总群】:加入群聊

    资料大全

    相关文章

      网友评论

        本文标题:Android进阶开发 - 编码,加密,Hash

        本文链接:https://www.haomeiwen.com/subject/dcwaoqtx.html