Android开发之加密解密

加密算法

主要作用就是隐藏信息,让信息不可见,也用于提高网络访问的安全。

常见加密算法

  • BASE64 用于二进制内容转换为可编辑的文本内容
  • MD5 信息摘要算法
  • SHA 安全散列算法
  • HMAC 散列消息鉴别码
  • DES 数据加密算法
  • PBE 基于密码验证
  • RSA 非对称加密算法
  • SSL SSL加密 - https协议
  • DH 密钥一致协议
  • DSA 数字签名
  • ECC 椭圆曲线密码编码学

BASE64

严格地说,属于编码格式,而非加密算法,用于二进制内容转换为可编辑的文本内容。


Base64.jpg

按照RFC2045的定义,Base64被定义为:
Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.)。常见于邮件、http加密,截取http信息,你就会发现登录操作的用户名、密码字段通过BASE64加密的。

需要明文保存二进制数据时,可以将不可打印的二进制数据经过Base64编码转成可打印的字符串。

Mozilla Thunderbird和Evolution用Base64来保密电子邮件密码。

Base64也会经常用作一个简单的“加密”来保护某些数据,而真正的加密通常都比较繁琐。

垃圾讯息传播者用Base64来避过反垃圾邮件工具,因为那些工具通常都不会翻译Base64的讯息。

在LDIF档案,Base64用作编码字串。

编码后的内容,是由64个字符(大小写英文字母 0-9 + / (= 补位符,填充字符))组成的序列,成为Base64。可逆的编码方式。

Android中自带的Base64加密算法:
Android自身带有Base64加密与解密的包,可以方便地加密密码方便传输。

 String base64Token = Base64.encodeToString(token.trim().getBytes(), Base64.NO_WRAP);
 byte[] buffer = Base64.decode(base64Token,Base64.DEFAULT);

看起来用法与Java所带的sun.misc的Base64Encoder这些用法差不多,但应该留意到了,在encode的时候,会有一个参数Flags(即上面代码中的Base64.DEFAULT)这个参数有什么用呢?根据Android SDK的描述,这种参数有5个:

  • DEFAULT 这个参数是默认,使用默认的方法来加密
  • CRLF 这个参数看起来比较眼熟,它就是Win风格的换行符,意思就是使用CRLF 这一对作为一行的结尾而不是Unix风格的LF
  • NO_PADDING 这个参数是略去加密字符串最后的”=”
  • NO_WRAP 这个参数意思是略去所有的换行符(设置后CRLF就没用了)
  • URL_SAFE 这个参数意思是加密时不使用对URL和文件名有特殊意义的字符来作为加密字符,具体就是以-和 _ 取代+和/

基本的单向加密算法

单项的加密,不能解密。
MD5(Message Digest algorithm 5,信息摘要算法)缩写,广泛用于加密和解密技术,常用于文件校验。

MD5.jpg

不管文件多大,经过MD5后都能生成唯一的MD5值。好比现在的ISO校验,都是MD5校验。怎么用?当然是把ISO经过MD5后产生MD5的值。一般下载linux-ISO的朋友都见过下载链接旁边放着MD5的串。就是用来验证文件是否一致的。

 // 获取一个信息加密的加密的摘要对象
 // getInstance需要传递一个算法的名称
 MessageDigest md = MessageDigest.getInstance(“MD5”);
MD5.png
MD5用户登录.jpg

SHA(Secure Hash Algorithm,安全散列算法)
HMAC(Hash Message Authentication Code,散列消息鉴别码)

MD5、SHA、HMAC这三种加密算法,可谓是非可逆加密,就是不可解密的加密方法。

我们通常只把他们作为加密的基础,单纯的以上三种的加密并不可靠。
MD5、SHA 可以通过暴力碰撞算法破解。

复杂的对称加密(DES、PBE)

DES(Data Encryption Standard,数据加密算法)
是IBM公司于1975年研究成功并公开发表的,是一种堆成加密算法.

DES.jpg

DES算法的入口参数有三个: Key、 Data、 Mode
其中Key为8个字节共64位,是DES算法的工作密钥;
Data也为8个字节64位,是要被加密或被解密的数据;
Mode为DES的工作方式,有两种:加密或解密。
DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位。

PBE(Password-based encryption,基于密码验证)

非对称加密算法

RSA(算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman)

RSA1.jpg
RSA2.jpg
RSA3.jpg

这种算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。
这种加密算法的特点主要是密钥的变化,DES只有一个密钥。相当于只有一把钥匙,如果这把钥匙丢了,数据也就不安全了。
RSA同时有两把钥匙,公钥与私钥。
同时支持数字签名。数字签名的意义在于,对传输过来的数据进行校验。确保数据在传输工程中不被修改。

流程分析:
甲方构建密钥对儿,将公钥公布给乙方,将私钥保留。
甲方使用私钥加密数据,然后用私钥对加密后的数据签名,发送给乙方签名以及加密后的数据;
乙方使用公钥、签名来验证待解密数据是否有效,如果有效使用公钥对数据解密。
乙方使用公钥加密数据,向甲方发送经过加密后的数据;甲方获得加密数据,通过私钥解密。

DH(Diffie-Hellman算法,密钥一致协议)
DSA(Digital Signature Algorithm,数字签名)
ECC(Elliptic Curves Cryptography,椭圆曲线密码编码学)

SSL加密 - https协议

http 明文
https SSL加密
OpenSSL - ssl加密第三方的开源组件

安装数字证书
证书存放在浏览器中,在服务端也有对应证书的存根 。
访问网站时,通过证书进行加密。
服务器通过证书存根来对加密的数据进行解密。

使用

在Android开发中,一般只用到Base64,MD5,RSA,DES。

我们用Base64编码:大家要注意身体,不要熬夜写代码

String oldWord = "大家要注意身体,不要熬夜写代码";
        try {
            //编码
            String encodeWord = Base64.encodeToString(oldWord.getBytes("utf-8"), Base64.NO_WRAP);
            Log.i("Rair", " encode wrods = " + encodeWord);
            //解码
            String decodeWord = new String(Base64.decode(encodeWord, Base64.NO_WRAP), "utf-8");
            Log.i("Rair", "decode wrods = " + decodeWord);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

运行后得到:

10-19 00:11:18.062 5899-5899/com.rair.encrptdemo I/Rair:  encode wrods = 5aSn5a626KaB5rOo5oSP6Lqr5L2T77yM5LiN6KaB54as5aSc5YaZ5Luj56CB
10-19 00:11:18.062 5899-5899/com.rair.encrptdemo I/Rair: decode wrods = 大家要注意身体,不要熬夜写代码

具体用法可参考Demo
https://coding.net/u/Rair/p/RairDemo/git

https://github.com/Rairmmd/android-demo

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容