找到了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目录主文件:

  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

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. PHP android ios相互兼容的AES加密算法

    APP项目用户密码传输一直没有用HTTPS,考虑到用户的隐私暂时先用AES对密码加密,以后也可以用于手机端与服务端加密交互. PHP的免费版phpAES项目,手机端解码各种不对. 好不容易找了PHP ...

  4. iOS,Android,.NET通用AES加密算法

    原文:iOS,Android,.NET通用AES加密算法 这两天为移动App开发API,结果实现加密验证时碰到一大坑.这里不得不吐槽下又臭又硬的iOS,Windows Server无法解密出正确的结果 ...

  5. 【转】PHP android ios相互兼容的AES加密算法

    APP项目用户密码传输一直没有用HTTPS,考虑到用户的隐私暂时先用AES对密码加密,以后也可以用于手机端与服务端加密交互. PHP的免费版phpAES项目,手机端解码各种不对. 好不容易找了PHP ...

  6. android AES 加密解密

    import java.security.Provider; import java.security.SecureRandom; import javax.crypto.Cipher; import ...

  7. AES加密算法C++实现

    我从网上下载了一套AES加密算法的C++实现,代码如下: (1)aes.h #ifndef SRC_UTILS_AES_H #define SRC_UTILS_AES_H class AES { pu ...

  8. Qt使用AES加密算法对字符串进行加密

          因工作需要,需要对字符串进行加密处理,在网上找了很长时间,终于找到了一个可以使用的aes加密算法.其源代码采用c++编写而成,但其头文件引用windows.h,经过修改部分代码,将#inc ...

  9. .NET工行E生活接入AES加密算法的吐槽-2018

    工行E生活V2版本AES加密算法 吐槽一下工行的java算法,真的是非标准的,参考了java代码,还参考了php代码终于搞定了. 真的是很坑,很坑.中间还涉及到多重加密之类的,一行行把代码翻译成C#代 ...

随机推荐

  1. js前端分享功能

    直接添加网页分享代码就可以了.实现方法如下:1.打开百度分享:http://share.baidu.com.2.点击“代码获取”.3.进行个性化设置.

  2. Linux命令之sort

    sort [选项] [文件] 对文本文件的行进行排序.常见的字符排序空字符串<数字<a<A<b<B...<z<Z (1).常用选项 -b,--ignore-l ...

  3. apue第16章笔记

    intel 都是小端,小端即最低有效字节在最低地址上. tcp/ip协议栈使用大端字节序. connect失败可能是一瞬时的,用指数补偿算法处理,exponential backoff.但是在bsd套 ...

  4. WebDAV服务漏洞利用工具DAVTest

    WebDAV服务漏洞利用工具DAVTest   WebDAV是基于Web服务的扩展服务.它允许用户像操作本地文件一样,操作服务器上的文件.借助该功能,用户很方便的在网络上存储自己的文件.为了方便用户使 ...

  5. UML动态模型(顺序图、协作图、状态图)

    顺序图:用来表示用例中的行为顺序,当执行一个用例行为时,顺序图中的每条信息 对应了一个类操作或状态机中引起转换的事件.顺序图展示对象之间的交互,这些交互是指在场景或用例的时间六中发生的,顺序图属于动态 ...

  6. UML整体概括

    UML (Unified Modeling Language)为面向对象软件设计提供统一的.标准的.可视化的建模语言.适用于描述以用例为驱动,以体系结构为中心的软件设计的全过程. UML的定义包括UM ...

  7. CDOJ 1281 暴兵的卿学姐 构造题

    暴兵的卿学姐 题目连接: http://acm.uestc.edu.cn/#/problem/show/1281 Description 沈宝宝又和卿学姐开始玩SC2了! 自从沈宝宝学会新的阵型后,就 ...

  8. CDOJ 1277 智商杯考试 每周一题 div2 二分+数学

    智商杯考试 题目连接: http://acm.uestc.edu.cn/#/problem/show/1277 Description 你是一个挂科选手. 你现在正在考试,你很方. 你参加的考试叫做智 ...

  9. CountDownLatch使用场景及分析 并发测试

    原文:https://www.cnblogs.com/bqcoder/p/6089101.html CountDownLatch使用场景及分析   JDk1.5提供了一个非常有用的包,Concurre ...

  10. PostgreSQL配置文件--其他

    9 CLIENT CONNECTION DEFAULTS 9.1 Statement Behavior 9.1.1 search_path 字符型 默认:search_path = '"$u ...