对称加密无论是加密还是解密都使用同一个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]加密技术的更多相关文章

  1. [转载] Android逃逸技术汇编

    本文转载自: http://blogs.360.cn/360mobile/2016/10/24/android_escape/ 摘    要 传统逃逸技术涉及网络攻防和病毒分析两大领域,网络攻防领域涉 ...

  2. Android开发技术周报182学习记录

    Android开发技术周报182学习记录 教程 App安全二三事 记录 为什么要安全 App的移动安全主要包括下面几种: 密钥破解,导致本地加密数据被盗取. 通信密钥破解,导致接口数据被盗取. 伪造接 ...

  3. Android开发技术周报176学习记录

    Android开发技术周报176学习记录 教程 当 OkHttp 遇上 Http 2.0 http://fucknmb.com/2018/04/16/%E5%BD%93OkHttp%E9%81%87% ...

  4. android加密解密完美教程

    经常使用加密算法:DES.3DES.RC4.AES,RSA等; 对称加密:des,3des,aes 非对称加密:rsa 不可逆加密:md5 加密模式:ECB.CBC.CFB.OFB等; 填充模式:No ...

  5. PHP加密技术

    一.MD5加密 直接干,这里以一个登录页面为例: <?php require_once 'config/database.config.php'; $act=$_REQUEST['act']; ...

  6. Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC

    Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC 博客分类: Java/Security Javabase64macmd5sha     加密解密,曾经是我一 ...

  7. 斯诺登称NSA攻破互联网加密技术

    据财新网报道,本已渐渐平静的斯诺登泄密事件在9月6日再掀波澜.英国<卫报>.美国<纽约时报>和美国非盈利调查新闻机构ProPublica联合报道称,根据斯诺登提供的大量文件,美 ...

  8. 运用加密技术保护Java源代码/定制ClassLoader

    为什么要加密? 对于传统的C或C++之类的语言来说,要在Web上保护源代码是很容易的,只要不发布它就可以.遗憾的是,Java程序的源代码很容易被别人偷看.只要有一个反编译器,任何人都可以分析别人的代码 ...

  9. Java加密技术

    相关链接: Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC Java加密技术(二)——对称加密DES&AES Java加密技术(三)——PBE算法  ...

随机推荐

  1. lecture2-NN结构的主要类型的概述和感知机

    Hinton课程第二课 一.NN结构的主要类型的概述 这里的结构就是连接在一起的神经元.目前来说,在实际应用中最常见的NN就是前向NN,他是将数据传递给输入单元,通过隐藏层最后到输出层的单元:一个更有 ...

  2. 移动端调试利器 JSConsole 介绍

    先看这篇文章 Web应用调试:现在是Weinre和JSConsole,最终会是WebKit的远程调试协议. 我们先不看未来,从此文可见,当下的移动端调试还是 Weinre 和 JSConsole 的天 ...

  3. <实训|第七天>横扫Linux磁盘分区、软件安装障碍附制作软件仓库

    期待已久的linux运维.oracle"培训班"终于开班了,我从已经开始长期四个半月的linux运维.oracle培训,每天白天我会好好学习,晚上回来我会努力更新教程,包括今天学到 ...

  4. 发布园友设计的新款博客皮肤BlueSky

    园友#a为大家设计了一款“简单.纯粹,一点淡雅,一点宁静”的博客皮肤——BlueSky,欢迎您的享用!感谢#a的精心设计! 如果您有兴趣为大家设计博客皮肤,请将您设计的html/css/images文 ...

  5. 用Dart&Henson玩转Activity跳转

    用Dart&Henson玩转Activity跳转 Extra是Android标准的组件之间(Activity/Fragment/Service等)传递数据的方式.本文介绍了开源项目Dart的使 ...

  6. web安全——代理(nginx)

    场景 过滤非正常用户使用的http请求. 限制正常用户使用的范围(下载速度.访问频率等). 通过架构规划来提升安全. 能自动解决http请求问题. 解决方案 代理自身的安全 千万不要使用root启动! ...

  7. js单选和复选框

    http://blog.csdn.net/chelen_jak/article/details/44827393 http://www.gbtags.com/technology/jquerynews ...

  8. VMware精简系统Win系列|体积更小更稳定

    此Win系列基于VMware10 给个我自用的超精简VM10.0.3 XP重新制作体积大了一点但更稳定,压缩包166M 制作了Win 2003,压缩包171.4M Win7重新制作体积更小更稳定,压缩 ...

  9. myeclipse 连接svn服务器验证位置时发生错误 404 forbidden

    来源于:https://my.oschina.net/softwarechina/blog/220300 网上有文章说是C:\Users\thinkpad\AppData\Roaming\Subver ...

  10. springMVC之servlet-config.xml配置

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...