6.android加密解析
编码.数字摘要.加密.解密
UrlEncoder /Urldecoder
String str = "http://www.baidu.com?serach = 哈哈"; String encode = URLEncoder.encode(str); System.out.println("encode:" + encode); //URLDecoder 操作 String decode = URLDecoder.decode(encode); System.out.println("decode:" + decode); //URLDecoder一个没有被Encode的数据,会原样打出 String decode2 = URLDecoder.decode(str); System.out.println("decode:" + decode2);
Base64:byte[]-->string
上传图片,语音:
- 存对象到sp:如map
iv = (ImageView) findViewById(R.id.iv); findViewById(R.id.btn1).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //1.bitmap Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); //2. bitmap-->byte[] ByteArrayOutputStream baos = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos); byte[] byteArray = baos.toByteArray(); //3.byte[]->string,这样就可以用string传给服务器 String bitmapString = Base64.encodeToString(byteArray, Base64.DEFAULT); System.out.println("bitmapString :" + bitmapString); //4. string-->byte[]; byte[] bitmapByteArr = Base64.decode(bitmapString, Base64.DEFAULT); //5.byte[]-->bitmap Bitmap bitmap2 = BitmapFactory.decodeByteArray(bitmapByteArr, 0, bitmapByteArr.length); //6.在imageView上设置图片 iv.setImageBitmap(bitmap2); //obj-->byte[] -->string->sp } });
- md5,sha1:数字摘要算法(不是加密解密),1kb文件和一个1tb的文件md5之后长度是一样的,是单向的;
- 作用:确定数据未被修改,确定数据的唯一性
- 密码一般会md5,加盐
- 秒传:长度变小了
- android supoort v4:检验是否修改过
加密:aes des
- 对称加密:密码只有一个,加密速度比较快,只有一个密钥,可以加密文件之类;
非对称加密:密钥有两个(公钥,私钥),私钥自己保存.公钥给别人.私钥自己留着;
公钥加密-->私钥解密
public static byte[] encryptByPublicKey(byte[] data, String publicKey)//公钥加密 public static byte[] decryptByPrivateKey(byte[] encryptedData, String privateKey)//私钥解密
私钥加密-->公钥解密
public static byte[] encryptByPrivateKey(byte[] data, String privateKey);//私钥加密 public static byte[] decryptByPublicKey(byte[] encryptedData, String publicKey)//公钥解密
私钥签名-->公钥验证-->数字签名
public static String sign(byte[] data, String privateKey);//私钥签名 public static boolean verify(byte[] data, String publicKey, String sign)//公钥验证
- 数字签名作用:来源的不可否认性
- 公钥互换:相互置换公钥
sqlite加密,使用sqlcipher:把lib、assets目录的东西拷进去,但是内存会增加4-5m,需要对数据库加密的时候可以考虑用
public class MySqliteOpenHelper extends SQLiteOpenHelper { private static String name = "my.db"; private static int version = 1; public MySqliteOpenHelper(Context context) { super(context, name, null, version); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create TABLE t_test(name TEXT,age INTEGER)"); } @Override public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { // TODO } }
MainActivity
public class MainActivity extends Activity { private MySqliteOpenHelper helper; private String password = "xxxxoooo"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SQLiteDatabase.loadLibs(this);//初始化sqlcipher helper = new MySqliteOpenHelper(this); } public void insert(View v) { //多了个password SQLiteDatabase db = helper.getWritableDatabase(password); ContentValues values = new ContentValues(); values.put("name", "billy"); values.put("age", 100); db.insert("t_test", null, values); } public void query(View v) { SQLiteDatabase db = helper.getReadableDatabase(password); Cursor c = db.query("t_test", null, null, null, null, null, null); while (c.moveToNext()) { String name = c.getString(0); int age = c.getInt(1); System.out.println("name:" + name + "age:" + age); } } }
token加密
- 回顾
- aes des(对称加密) rsa(非对称) md5 sha1(数字摘要) urlencoder/urldecoder base(编码)
- vdisk_lib中如何对token进行加密:
IMEI-->有别于sim卡的序列号
可以作为手机的唯一标识,类似我们pc的机器码;
- 两个概念
- imei:设备的唯一标识;
- imsi:移动sim卡的唯一标识;
- 买手机:3码合一
手机序列号 电池序列号 手机包装序列号
- 统计apk的安装量
- 启动应用程序的时候.把手机的imei号上传到服务器;
获取
TelephonyManager telephonyManager = (TelephonyManager) ctx .getSystemService(Context.TELEPHONY_SERVICE); telephonyManager.getDeviceId()
3层加密-->只是加大了被破解的难度
des-->密码唯一化,复杂化(但是还是不安全)
this.PASSWORD = "com.sina.vdisk.security.password.d7af3082d815945ff47ae58647bd9436" + IMEI + appKeyPair.key + appKeyPair.secret;
秘钥放到so库里面.通过jni调用-->密码放到so库里面.这个时候.加到了获取秘钥的难度.(同样,反编译apk,可以拿到so库,然后可以调用本地方法获取到密码)
- 混淆(也是可以拿到,混淆的时候.我们的字符串是不会进行混淆的.只是混淆我们方法名,以及变量名)
apk如何防止被反编译
- 梆梆加固
- 爱加密
6.android加密解析的更多相关文章
- Android加密解析
编码.数字摘要.加密.解密 UrlEncoder /Urldecoder String str = "http://www.baidu.com?serach = 哈哈"; Stri ...
- android XMl 解析神奇xstream 六: 把集合list 转化为 XML文档
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的xml文件
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- android XMl 解析神奇xstream 四: 将复杂的xml文件解析为对象
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- android XMl 解析神奇xstream 三: 把复杂对象转换成 xml
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- android XMl 解析神奇xstream 二: 把对象转换成xml
前言:对xstream不理解的请看:android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 1.Javabeen 代码 packa ...
- Android动画解析--XML
动画类型 Android的animation由四种类型组成 XML中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面 ...
- android 中解析XML的方法(转)
在XML解析和使用原始XML资源中都涉及过对XML的解析,之前使用的是 DOM4J和 XmlResourceParser 来解析的.本文中将使用XmlPullParser来解析,分别解析不同复杂度的t ...
- 实现android上解析Json格式数据功能
实现android上解析Json格式数据功能,该源码转载于安卓教程网的,http://android.662p.com ,个人感觉还不错的,大家可以看看一下吧. package com.practic ...
随机推荐
- HDU 4870 Rating(概率、期望、推公式) && ZOJ 3415 Zhou Yu
其实zoj 3415不是应该叫Yu Zhou吗...碰到ZOJ 3415之后用了第二个参考网址的方法去求通项,然后这次碰到4870不会搞.参考了chanme的,然后重新把周瑜跟排名都反复推导(不是推倒 ...
- 安装Odoo9出现的could not execute command "lessc"问题
解决方案: apt-get install node-less
- 解决Windows10下80端口被PID为4的System占用的问题
一.背景 最近由于好奇心,更新了windows10系统,感觉上手还蛮快,而且体验还不错,但是在IDEA中做开发时,使用80端口进行启动项目的时候发现端口被占用了,于是尝试解决这个问题.具体步骤如下,分 ...
- Mysql之performance Schema
Performance schema是用于监控Mysql执行,具有如下特征: 1.用于在运行时探查Mysql Server的执行过程,是由Performance_schema引擎和 Performan ...
- Linuxc:创建与监控多个子进程
#include <unistd.h> #include <sys/types.h> #include <stdlib.h> #include <signal ...
- 三、jQuery--Ajax基础--Ajax全接触--Ajax在JS中的应用
Ajax的全称:Asynchronous JavaScript And XML(异步的 JavaScript 和 XML). Ajax不是某种编程语言,是一种在无需重新加载整个网页的情况下能够更新部分 ...
- Quartus ii 12.1软件破解之后编译原有的工程出现报警错误的解决办法
在Quartus ii 12.1软件破解之后,想用来编译原来编译过的工程,但是编译到最后出现下面两个错误警告: 原来以为没有破解成功或者安装的时候有文件被杀毒软件吃了,导致安装错误,又重新安装了两次都 ...
- 关于Java反射机制的几个问题
>>如何在运行时确定对象类型 运行时类型识别(Run-time Type Identification, RTTI)主要有两种方式, 一种是在编译时和运行时已经知道了所有的类型,另外一种是 ...
- Delphi中exit、break、continue等跳出操作的区别
Delphi中表示跳出的有break,continue,abort,exit,halt,runerror等 1.break 强制退出最近的一层循环(注意:只能放在循环里:而且是只能跳出最近的一层循环) ...
- sqlplus使用(一)
一,sqlplus 环境变量 sqlplus的环境变量(来自SQL*Plus® User's Guide and Reference Release 11.2) Parameter or Variab ...