[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算法 ...
随机推荐
- echarts .NET类库开源
前言: 2012年从长沙跑到深圳,2016年又从深圳回到长沙,兜兜转转一圈,又回到了原点.4年在深圳就呆了一家公司,回长沙也是因为深圳公司无力为继,长沙股东老板挽留,想想自己年纪也不小了.就回来了,在 ...
- 打磨程序员的专属利器——命令行&界面
工欲善其事,必先利其器,程序员更是如此,如果没有一套与自己思维同步的工具,将非常难受并且编码效率会非常低. 但十个程序员就有对工具的十种不同理解,本人现在冒然将自己的“工具箱”拿出来晒晒.若对大家没帮 ...
- 怎样关闭google的自动更新
谷歌的自动更新很烦人的,只要你点击关于Google Chrome,谷歌就会自动更新成最新版本. 但是sencha框架好像与谷歌29.0以上的兼容性不是很好,所以关闭谷歌自动更新的需求来了,网上很多人说 ...
- eclipse failed to load the jni jvm.dll
问题:打开Eclipse弹出,eclipse failed to load the jni jvm.dll,一般都是本机的JDK与Eclipse位数不等{32-64,64-32} 解决:看本机Java ...
- android 圆角图片的实现
图片展示的时候总觉的直角的图片不好看?好办法来了!-- public class ToRoundCorner extends Activity{ public Bitmap toRoundCorner ...
- Android复习笔记--架构与版本
#Android架构: 1. Linux 内核层 Android 系统是基于Linux 2.6 内核的,这一层为Android 设备的各种硬件提供了底 层的驱动,如显示驱动.音频驱动.照相机驱动.蓝牙 ...
- 1031MVCC和事务浅析
转自 http://blog.csdn.net/sofia1217/article/details/50778906 关于MVCC浅析,有些难度http://xuebinbin212.blog.163 ...
- git标签
git标签 如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag 给它打上标签.-a 选项意为"创建一个带注解的标签". 添加标签命令: $ gi ...
- KVM 内存虚拟化
内存虚拟化的概念 除了 CPU 虚拟化,另一个关键是内存虚拟化,通过内存虚拟化共享物理系统内存,动态分配给虚拟机.虚拟机的内存虚拟化很象现在的操作系统支持的虚拟内存方式,应用程序看到邻近的内存 ...
- 开发错误记录9:Application无法跳转到Activity
今天在做友盟消息推送,当客户端收到推送消息时,如客户端不是活动的,用如下代码 启动Activity发现无法启动,原因是原有的任务栈已消毁,判断启动是如消毁,如有,再新建一个 只要给它添加一个标志 就可 ...