找到了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. 图片乱码问题 解决方法 php

    两个开发者都是下载同一个项目的git代码,但到本地环境,一个可以正常显示图片验证码,一个不行,找个半天开始以为环境问题 找了半天 不是 很多没说到重点 其实不只是当前文件格式问题 也要考虑其他调用文件 ...

  2. 洛谷P1919 A*B problem 快速傅里叶变换模板 [FFT]

    题目传送门 A*B problem 题目描述 给出两个n位10进制整数x和y,你需要计算x*y. 输入输出格式 输入格式: 第一行一个正整数n. 第二行描述一个位数为n的正整数x. 第三行描述一个位数 ...

  3. Codeforces Round #450 (Div. 2) ABCD

    这次还是能看的0 0,没出现一题掉分情况. QAQ前两次掉分还被hack了0 0,两行清泪. A. Find Extra One   You have n distinct points on a p ...

  4. 【费用流】NOI2008志愿者招募

    1061: [Noi2008]志愿者招募 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 5171  Solved: 3089[Submit][Stat ...

  5. 【DFS】【打表】Lattice Animals

    [ZOJ2669]Lattice Animals Time Limit: 5 Seconds      Memory Limit: 32768 KB Lattice animal is a set o ...

  6. BZOJ 3594 [Scoi2014]方伯伯的玉米田(二维树状数组)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3594 [题目大意] 给出一个数列,选出k个区间使得区间内数全部加1, 求k次操作之后最 ...

  7. 【枚举】【尺取法】hdu6103 Kirinriki

    两个等长字符串A,B的距离被定义为 给你一个字符串,问你对于所有长度相等的不相交子串对,其距离不超过m的前提下,最长的长度是多少. 枚举对称轴,两侧先贪心地扩展到最长,超过m之后,再缩短靠近对称轴的端 ...

  8. 【二分】Codeforces Round #417 (Div. 2) C. Sagheer and Nubian Market

    傻逼二分 #include<cstdio> #include<algorithm> using namespace std; typedef long long ll; ll ...

  9. 【分块】【LCT】bzoj2002 [Hnoi2010]Bounce 弹飞绵羊

    分块,每个点统计还有几步弹出该块,以及它弹出块后的下一个节点是哪个点. 注意:update某个点的时候,会可能对当前块内 该点及以前的点 产生影响,所以对这部分点进行更新. #include<c ...

  10. 操作系统--IO系统任务简述

    内核IO---操作系统对于IO的职责 1.对文件和设备命名空间的管理 2.文件和设备访问的控制 3.IO操作控制 4.文件系统的空间分配 5.设备分配 6.IO缓冲管理 7.IO调度方式 8.设备状态 ...