[Android]加密技术
对称加密无论是加密还是解密都使用同一个key,而非对称加密需要两个key(public key和private key)。使用public key对数据进行加密,必须使用private key对数据进行解密。
例如,有A 和 B 两个人。A 要求 B 将一个文件经过加密后传给 A。这时A使用了密钥生成软件生成了两个key(public key和private key), 首先A将public key通过网络发给了B,然后 B 用 public key对文件进行加密后,
将经过加密后的文件发给A,最后 A再用 private key对该文件进行解密。自始至终private key都没通过网络进行传输,因此,只要private key不泄露,即使public key和经过加密的文件都被截获,仍然无法对该文件进行解密,
因此,非对称加密较对称加密更安全。
Android SDK支持如下3种不可逆的加密算法。
1. MD5(message-digest algorithm 5,信息-摘要算法), 广泛用于加密和解密技术,常用于文件校验。不管文件多大,经过MD5后都能生成唯一的MD5值。就像现在的ISO校验,都是MD5校验。
2. SHA(Secure Hash Algorithm,安全散列算法),数字签名等密码学应用中重要的工具,被广泛地应用于电子商务等信息安全领域。虽然,SHA与 MD5通过碰撞法都被破解了,但是SHA仍然是公认的安全加密算法,较之MD5更为安全。
3. HMAC(Hash Message Authentication Code,散列消息鉴别码,基于密钥的Hash算法的认证协议)。消 息鉴 别码实现鉴别的原理是,用公开函数和密钥产生一个固定长度的值作为认证标识,用这个标识鉴别消息的完整性。
使用一个密钥生成一个固定大小的小数据块,即 MAC,并将其加入到消息中,然后传输。接收方利用与发送方共享的密钥进行鉴别认证等。
种是不可逆的加密算法。AES是可逆的加密算法。实际上,如果将Base64编码表中的字符随机打乱,也属于一种对称加密算法(Base64 编码表相当于 key),
种加密算法用数据进行加密和解密。
MD5算法
// source参数是待加密的字符串,encrypt_MD5方法返回加密后的结果
public String encrypt_MD5(String source) throws Exception
{
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(source.getBytes());
return Base64.encodeToString(md5.digest(), Base64.DEFAULT);
}
SHA算法
public String encrypt_SHA(String source) throws Exception
{
MessageDigest sha = MessageDigest.getInstance("SHA");
sha.update(source.getBytes());
return Base64.encodeToString(sha.digest(), Base64.DEFAULT);
}
HMAC算法
public static String initMacKey() throws Exception
{
KeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5");
SecretKey secretKey = keyGenerator.generateKey();
return Base64.encodeToString(secretKey.getEncoded(), Base64.DEFAULT);
}
// HMAC加密
public static String encrypt_HMAC(String source, String key)
throws Exception
{
SecretKey secretKey = new SecretKeySpec(Base64.decode(key,
Base64.DEFAULT), "HmacMD5");
Mac mac = Mac.getInstance(secretKey.getAlgorithm());
mac.init(secretKey);
return Base64.encodeToString(mac.doFinal(source.getBytes()),
Base64.DEFAULT);
}
// 使用HMAC算法对数据进行加密
try
{
String key = initMacKey();
String result = encrypt_HMAC("Android面试", key);
}
catch (Exception e)
{
}
AES算法
位");
return null;
}
byte[] raw = key.getBytes("ASCII");
SecretKeySpec keySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec iv = new IvParameterSpec(
"0102030405060708".getBytes());
cipher.init(Cipher.DECRYPT_MODE, keySpec, iv);
byte[] encrypted1 = Base64.decode(src, Base64.DEFAULT);
try
{
byte[] original = cipher.doFinal(encrypted1);
String originalString = new String(original);
return originalString;
}
catch (Exception e)
{
return null;
}
}
catch (Exception ex)
{
return null;
}
}
[Android]加密技术的更多相关文章
- [转载] Android逃逸技术汇编
本文转载自: http://blogs.360.cn/360mobile/2016/10/24/android_escape/ 摘 要 传统逃逸技术涉及网络攻防和病毒分析两大领域,网络攻防领域涉 ...
- Android开发技术周报182学习记录
Android开发技术周报182学习记录 教程 App安全二三事 记录 为什么要安全 App的移动安全主要包括下面几种: 密钥破解,导致本地加密数据被盗取. 通信密钥破解,导致接口数据被盗取. 伪造接 ...
- Android开发技术周报176学习记录
Android开发技术周报176学习记录 教程 当 OkHttp 遇上 Http 2.0 http://fucknmb.com/2018/04/16/%E5%BD%93OkHttp%E9%81%87% ...
- android加密解密完美教程
经常使用加密算法:DES.3DES.RC4.AES,RSA等; 对称加密:des,3des,aes 非对称加密:rsa 不可逆加密:md5 加密模式:ECB.CBC.CFB.OFB等; 填充模式:No ...
- PHP加密技术
一.MD5加密 直接干,这里以一个登录页面为例: <?php require_once 'config/database.config.php'; $act=$_REQUEST['act']; ...
- Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC
Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC 博客分类: Java/Security Javabase64macmd5sha 加密解密,曾经是我一 ...
- 斯诺登称NSA攻破互联网加密技术
据财新网报道,本已渐渐平静的斯诺登泄密事件在9月6日再掀波澜.英国<卫报>.美国<纽约时报>和美国非盈利调查新闻机构ProPublica联合报道称,根据斯诺登提供的大量文件,美 ...
- 运用加密技术保护Java源代码/定制ClassLoader
为什么要加密? 对于传统的C或C++之类的语言来说,要在Web上保护源代码是很容易的,只要不发布它就可以.遗憾的是,Java程序的源代码很容易被别人偷看.只要有一个反编译器,任何人都可以分析别人的代码 ...
- Java加密技术
相关链接: Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC Java加密技术(二)——对称加密DES&AES Java加密技术(三)——PBE算法 ...
随机推荐
- window.location.href = window.location.href 跳转无反应 a 超链接 onclick 点击跳转无反应
错误写法 , 主要是在 href="#"这里 <a href="#" id="send" onclick="return b ...
- c++游戏服务器编程学习笔记(一)TCP/IP
1. c++游戏服务器编程c++运行效率非常高2. TCP传输控制协议IP网际协议Socket 3.Linux 乌班图开源第三方库BOOST 4.80%游戏服务器端用C++工作量最大的地方是具体的游戏 ...
- c8051f320学习,单片机不外乎时钟、IO、串口、USB等外设用法
时钟 IO(输入.输出,如何配置) IO 数字和模拟资源可以通过25个I/O 引脚(C805 1F3 2 0 ),每个端口引脚都可以被定义为 通用I/O(GPIO)或 0 模拟输入 所有端口I ...
- IIS安装与MVC程序部署
最近在做访客系统,虽然说不是什么多大的项目,但麻雀虽小五脏俱全,使用EF Code First+Mysql+Frozenui响应式布局,感觉通过这个项目学到好多东西,Mysql的使用.EF映射Mysq ...
- Windows7 x64配置 Apache2 + PHP5 + MySQL5
1:相关软件下载: Apache HTTP Server 版本:(httpd-2.2.25-win32-x86-openssl-0.9.8y) PHP ...
- 如何解决Windows 10系统下设备的声音问题
如何解决Windows 10系统下设备的声音问题? 请阅读下面的说明来解决Windows 10设备上的声音问题. 1. 检查设备管理器 打开开始菜单,键入设备管理器, 从出现的结果中选择并打开它. 在 ...
- 详解C语言的htons和htonl函数、大尾端、小尾端
在Linux和Windows网络编程时需要用到htons和htonl函数,用来将主机字节顺序转换为网络字节顺序. 在Intel机器下,执行以下程序 int main(){ printf(" ...
- PotPlayer为播放而生的专业播放器
韩国,比较牛逼的视频播放器.专注与本地视频播放,值得拥有.... 免费下载:http://yunpan.cn/cmZ5ELC6DTI8Y 访问密码 4bf1
- 数据结构——动态链表(C++)
定义一个节点: [cpp] view plain copy print? #include <iostream> using namespace std; typedef int T; ...
- mysql 安装失败解决方法
在安装mysql的过程中,出现的最麻烦的问题和解决方法 安装后,启动不成功,就卡了,程序就没有响应. 如何解决: 找到mysql安装目录下的 #Path to the database root da ...