找到了AES加密算法。(当然还有MD5,BASE64什么的http://snowolf.iteye.com/blog/379860这篇文章列举了很多,但是基本都是j2se平台的,android平台不一定支持,但是AES算法Android是自带了包的,从官方的http://developer.android.com/reference/javax/crypto/Cipher.html可以看到。

AES加密算法是什么?大家可以自己去google,专家级程序员写好包,工程人员会用就行了。

这个例子其实是来自http://www.tutorials-android.com/learn/How_to_encrypt_and_decrypt_strings.rhtml。

src目录主文件:

[java] view plaincopy
  1. package com.qq;
  2. import java.security.SecureRandom;
  3. import javax.crypto.Cipher;
  4. import javax.crypto.KeyGenerator;
  5. import javax.crypto.SecretKey;
  6. import javax.crypto.spec.SecretKeySpec;
  7. import android.app.Activity;
  8. import android.os.Bundle;
  9. import android.util.Log;
  10. public class SimpleCrypto extends Activity {
  11. public static String encrypt(String seed, String cleartext) throws Exception {
  12. byte[] rawKey = getRawKey(seed.getBytes());
  13. byte[] result = encrypt(rawKey, cleartext.getBytes());
  14. return toHex(result);
  15. }
  16. public static String decrypt(String seed, String encrypted) throws Exception {
  17. byte[] rawKey = getRawKey(seed.getBytes());
  18. byte[] enc = toByte(encrypted);
  19. byte[] result = decrypt(rawKey, enc);
  20. return new String(result);
  21. }
  22. private static byte[] getRawKey(byte[] seed) throws Exception {
  23. KeyGenerator kgen = KeyGenerator.getInstance("AES");
  24. SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
  25. sr.setSeed(seed);
  26. kgen.init(128, sr); // 192 and 256 bits may not be available
  27. SecretKey skey = kgen.generateKey();
  28. byte[] raw = skey.getEncoded();
  29. return raw;
  30. }
  31. private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {
  32. SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
  33. Cipher cipher = Cipher.getInstance("AES");
  34. cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
  35. byte[] encrypted = cipher.doFinal(clear);
  36. return encrypted;
  37. }
  38. private static byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception {
  39. SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
  40. Cipher cipher = Cipher.getInstance("AES");
  41. cipher.init(Cipher.DECRYPT_MODE, skeySpec);
  42. byte[] decrypted = cipher.doFinal(encrypted);
  43. return decrypted;
  44. }
  45. public static String toHex(String txt) {
  46. return toHex(txt.getBytes());
  47. }
  48. public static String fromHex(String hex) {
  49. return new String(toByte(hex));
  50. }
  51. public static byte[] toByte(String hexString) {
  52. int len = hexString.length()/2;
  53. byte[] result = new byte[len];
  54. for (int i = 0; i < len; i++)
  55. result[i] = Integer.valueOf(hexString.substring(2*i, 2*i+2), 16).byteValue();
  56. return result;
  57. }
  58. public static String toHex(byte[] buf) {
  59. if (buf == null)
  60. return "";
  61. StringBuffer result = new StringBuffer(2*buf.length);
  62. for (int i = 0; i < buf.length; i++) {
  63. appendHex(result, buf[i]);
  64. }
  65. return result.toString();
  66. }
  67. private final static String HEX = "0123456789ABCDEF";
  68. private static void appendHex(StringBuffer sb, byte b) {
  69. sb.append(HEX.charAt((b>>4)&0x0f)).append(HEX.charAt(b&0x0f));
  70. }
  71. /** Called when the activity is first created. */
  72. @Override
  73. public void onCreate(Bundle savedInstanceState) {
  74. super.onCreate(savedInstanceState);
  75. setContentView(R.layout.main);
  76. String masterPassword = "a";
  77. String originalText = "0123456789";
  78. byte[] text = new byte[]{'0','1','2','3','4','5','6','7','8','9'};
  79. byte[] password = new byte[]{'a'};
  80. try {
  81. String encryptingCode = SimpleCrypto.encrypt(masterPassword,originalText);
  82. //          System.out.println("加密结果为 " + encryptingCode);
  83. Log.i("加密结果为 ",encryptingCode);
  84. String decryptingCode = SimpleCrypto.decrypt(masterPassword, encryptingCode);
  85. System.out.println("解密结果为 " + decryptingCode);
  86. Log.i("解密结果",decryptingCode);
  87. } catch (Exception e) {
  88. // TODO Auto-generated catch block
  89. e.printStackTrace();
  90. }
  91. }
  92. }

布局文件main.xml和配置文件AndroidManifest.xml默认就好了。最后结果在Log里面看,利用adb logcat > d:\1.txt定位到D盘的1.txt文件,然后用记事本打开就,查找”加密结果为“就可以看到了:

运行结果(从log日志中看到的):

I/加密结果为 (  190): BFB77D8F1E1EE9D5E252926A12659DE8

I/解密结果(  190): 0123456789

转载于:https://www.cnblogs.com/ruiati/p/3813541.html

Android AES加密算法及其实现相关推荐

  1. Android AES加密算法,现在实际上

    昨天,老板让我来看看android加密算法.于是在网上找了找,发现AES加密算法.(当然,MD5,BASE64什么http://snowolf.iteye.com/blog/379860这篇文章列举了 ...

  2. Android AES加密算法及事实上现

    昨天老大叫我看看android加密算法.于是网上找了找,找到了AES加密算法.(当然还有MD5,BASE64什么的http://snowolf.iteye.com/blog/379860这篇文章列举了 ...

  3. AES加密算法原理及java android实现

    AES当今最流行的对称加密算法之一,是DES的替代者. 密钥是AES算法实现加密和解密的根本.对称加密算法之所以对称,是因为这类算法对明文的加密和解密需要使用同一个密钥. AES支持三种长度的密钥: ...

  4. Android AES 文件加密解密

    几番折磨终有结果,现将Demo整理出来... [java] view plain copy   package com.king.zjc; import java.io.File; import ja ...

  5. Android AES加密解密

    AES加密算法模式有四种:ECB.CBC.CFB.OFB 要想AES加密,至少需要一个16位的密钥,如果是非ECB模式的加密,至少还得需要密钥偏移量. 下面是AES在线加密解密链接: AES在线加密解 ...

  6. Android AES加密解密工具类

    一个用于Android AES加密解密的工具类,记录一下... import android.os.Build import android.security.keystore.KeyGenParam ...

  7. aes算法的C语言实现代码,AES加密算法c语言实现代码

    AES加密算法c语言实现代码 #include "stdio.h" #include "memory.h" #include "time.h" ...

  8. AES加密算法动画演示

    波士顿大学的Howard Straubing做了这么一个动画来展示AES加密算法的演示,挺不错的. 点击这里看全屏

  9. JS 与 JAVA 跨语言实现 RSA 和 AES加密算法

    简介: 开发中为了数据的安全性使用加密算法对数据进行加密是一种很常见的情况,但就一种语言来说,直接使用提供的相应的库进行少许封装是一件很容易的事.但是在一些情况下我们可能需要跨语言来实现,比如前后端分 ...

最新文章

  1. LeetCode中等题之特殊等价字符串组
  2. 第十六届全国大学生智能车竞赛赛题规划
  3. 2.1.5 编码与调制
  4. python 在excel指定列添加数据_python读取excel指定列数据并写入到新的excel方法
  5. 【机器学习实战】Machine Learning in Action 代码 视频 项目案例
  6. 让outlook邮件里默认不显示发送方的头像
  7. Musical Theme pku1743 (后缀数组)
  8. Azure IoT Hub入门 - 接口介绍
  9. 机智云产品、功能、服务一览表
  10. Android onTouchEvent方法
  11. Apache Hadoop 2.4.1完全分布式集群安装
  12. 使用VBScript和ADSI
  13. 虚拟机中运行mac系统很卡
  14. linux windows网络工程师,2020年软考中级网络工程师考点:Linux系统
  15. 计算机中的文件及文件命名规则,文件名的命名规则是什么
  16. UIUC 云计算概念:SWIM协议笔记
  17. npm init @vitejs/app的背后,仅是npm CLI的冰山一角
  18. Python基础--搬家具(面向对象)
  19. 天池大数据比赛-菜鸟仓库比赛-第二赛季记录
  20. 硬盘存储结构及分区简介

热门文章

  1. Spark将数据写入Mysql
  2. 读论文笔记(1)——web文本挖掘技术研究
  3. Linux学习6之软件包管理--yum在线管理
  4. OpenCV 尺度不变特征检测:SIFT、SURF、BRISK、ORB
  5. 破解云数据库MongoDB运行变慢指南
  6. 《Python机器学习——预测分析核心算法》——2.2 分类问题:用声纳发现未爆炸的水雷...
  7. 如何让我的网站(独立网站或者blog)被百度收录?
  8. 随机抽样之蓄水池算法
  9. Java基础之Http协议的理解与总结
  10. 50 家硅谷 IT 公司技术博客