编码.数字摘要.加密.解密

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,需要对数据库加密的时候可以考虑用

MySqliteOpenHelper
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加密解析的更多相关文章

  1. Android加密解析

    编码.数字摘要.加密.解密 UrlEncoder /Urldecoder String str = "http://www.baidu.com?serach = 哈哈"; Stri ...

  2. android XMl 解析神奇xstream 六: 把集合list 转化为 XML文档

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  3. android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的xml文件

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  4. android XMl 解析神奇xstream 四: 将复杂的xml文件解析为对象

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  5. android XMl 解析神奇xstream 三: 把复杂对象转换成 xml

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  6. android XMl 解析神奇xstream 二: 把对象转换成xml

    前言:对xstream不理解的请看:android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 1.Javabeen 代码 packa ...

  7. Android动画解析--XML

    动画类型 Android的animation由四种类型组成 XML中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面 ...

  8. android 中解析XML的方法(转)

    在XML解析和使用原始XML资源中都涉及过对XML的解析,之前使用的是 DOM4J和 XmlResourceParser 来解析的.本文中将使用XmlPullParser来解析,分别解析不同复杂度的t ...

  9. 实现android上解析Json格式数据功能

    实现android上解析Json格式数据功能,该源码转载于安卓教程网的,http://android.662p.com ,个人感觉还不错的,大家可以看看一下吧. package com.practic ...

随机推荐

  1. IOS开发中与设计沟通之字体大小转换

    px:相对长度单位.像素(Pixel).pt:绝对长度单位.点(Point).1in = 2.54cm = 25.4 mm = 72pt = 6pc 具体换算是: Points Pixels Ems ...

  2. qt编译mysql插件

    安装MySQL,C:\Program Files (x86)\MySQL\MySQL Server 5.7,然后把include和lib文件夹拷贝到C盘,因为qmake不允许路径中有空格!!! 安装Q ...

  3. ios创建二维码

    #import "LCTwoCodeImage.h" @implementation LCTwoCodeImage +(UIImage *) GotoCreatMyTwoCode ...

  4. July 2nd, Week 27th Saturday, 2016

    The beauty of the journey is found in the scenery along the way. 旅行之美在于沿途所见的风景. I remember that ther ...

  5. windows一个目录下最大文件数目

    对于FAT16文件系统, 可以保存的文件体积最大值是 4 GB - 1 byte (2^32 bytes - 1 byte): 卷的最大体积是4GB:每个卷上最多可以保存的文件数量是65,536个 ( ...

  6. rabbitmq_hearbeat

    heartbeat[心跳检测],用于报告客户端与服务器之间连接的一种检测机制.在rabbitmq中有Sender和consumer. 为了确保rabbitmq与客户端的状态,需启用heartbeat. ...

  7. NYOJ之Fibonacci数

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAskAAAJwCAIAAAD0kmsHAAAgAElEQVR4nO3dvXLbOMM24O8k3PtA3E

  8. 20.策略者模式(Stragety Pattern)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  9. 无废话Android之smartimageview使用、android多线程下载、显式意图激活另外一个activity,检查网络是否可用定位到网络的位置、隐式意图激活另外一个activity、隐式意图的配置,自定义隐式意图、在不同activity之间数据传递(5)

    1.smartimageview使用 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&q ...

  10. 【翻译七】java-同步

    Synchronization Threads communicate primarily by sharing access to fields and the objects reference ...