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);
}
}
}

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如何防止被反编译
- 梆梆加固
- 爱加密
Android加密解析的更多相关文章
- 6.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 ...
随机推荐
- freemarker使用
获得FreeMarker 官网:http://freemarker.org/ 中文帮助文档:https://sourceforge.net/projects/freemarker/files/chin ...
- WPF中的数据绑定(初级)
关于WPF中的数据绑定,初步探讨 数据绑定属于WPF中比较核心的范畴,以下是对WPF中数据绑定的一个初步探讨.个人感觉还是带有问题性质的叙述比较高效,也比较容易懂 第一,什么是数据绑定? 假定有这么一 ...
- mkfs.ext4快速格式化大容量硬盘
安装ext4: yum -y install e4fsprogs 使用如下命令可以快速格式化大容量硬盘: mkfs.ext4 -T largefile /dev/xxx
- hibernate入门一
---恢复内容开始--- hibernate简介: 1.优秀的持久化(通俗讲把内存上的短时间运行信息存储在持久化硬盘上)框架. 2.作用于持久层,因为没什么侵入性,所以同样适用于其他层面上的存储 3. ...
- Matting任务里的Gradient与Connectivity指标
Matting任务里的Gradient与Connectivity指标 主要背景 Matting任务就是把α(不透明度, 也就是像素属于前景的概率).F(前景色)和B(背景色)三个变量给解出来. C为图 ...
- weblogic linux环境下新建domain
1. cd /home/weblogic/Oracle/Middleware/wlserver_10.3/common/bin 2. ./config.sh -mode=console(用控制台模式安 ...
- powershell脚本找修改的文件
$sourcedir="D:\workspace" $targetdir="E:\newf" $lastdate="2017-05-19" ...
- Mac更改PHP默认目录
在Mac上搭建了PHP服务器以后,默认的路径为/Library/WebServer/Documents下面,但这让人很不爽,我想修改到自己定义的路径下.经过好一番折腾,终于成功了. PHPEclips ...
- 结果集ResultSet
我们访问数据库时候经常见到这样遍历结果集 conn = DBHelper.getConnection(); String sql = "select * from items"; ...
- 使用kbmmw中的随机数替换delphi 10.3 自带的随机数
我们在开发中经常会使用随机数模拟各种随机条件,例如生成唯一的密码和令牌. 在计算机中,一般采用PRNG(伪随机序列发生器)模拟真实随机数.既然是随机,就要要没有任何规律, 在取值范围内均匀.独立.以确 ...