当前位置:首页 » 安卓系统 » android异或

android异或

发布时间: 2023-01-30 12:18:51

‘壹’ android的如何使用异或方式绘图

1)使用canvas/paint方式的绘图为软件渲染,通过cpu实现;使用opengles/shader方式的绘图为硬件加速渲染,通过gpu实现。
2)surfaceview和glsurfaceview的显示一般结合opengles,使用纹理(texture),为硬件渲染,通过gpu实现
3)glsurfaceview是surfaceview的子类,在后者基础上封装了egl环境管理,以及render线程
4)opengles绘制函数及shader是平台无关的,需要egl环境对接android/ios等平台
5)android graphic 底层都与BufferQueue、Surfaceflinger等相关,具体可参考android开发者文档
个人经验,如有不对之处请帮忙指出

作者:阿占
链接:https://www.hu.com/question/36030004/answer/65581599
来源:知乎
着作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

‘贰’ Android APK hash值算法

无符号右移16位然后做异或运算
hash值计算公式:
对于key的hashCode做hash操作,无符号右移16位然后做异或运算。还有平方取中法,伪随机数法和取余数法。这三种效率都比较低。而无符号右移16位异或运算效率是最高的。集合中的初始化容量(必须是二的n次幂)//默认的初始容量是16--1<<4相当于1*2的4次方---1*16staticfinalintDEFAULT_INITIAL_CAPACITY=1<<4;1212staticfinalinthash(Objectkey){inth;/*
如果key等于null:可以看到当key等于null的时候也是有哈希值的,返回的是0.
如果key不等于null:首先计算出key的hashCode赋值给h,然后与h无符号右移16位后的二进制进行按位异或得到最后的hash值。

‘叁’ Android 的void android.view.Window.setFlags(int flags, int mask) 的两个参数有啥意义

应该设置的值

应该被改变的设置值的位

这样如果setVisiability设置了其他值比如4564654是没效果的


使用这些位操作可以确定以前是是什么状态将要变成什么状态,便于控制进行正确的操作

例如从gone到invisible需要重新布局,从visiable到invisible就不需要布局只需要重绘


例如:Visiablity系统中:


如publicstaticfinalintGONE=0x00000008;

publicstaticfinalintVISIBLE=0x00000000;

VISIBILITY_MASK控制的标志位

不同的mask代表不用的功能,他们的位也是不同的

staticfinalintVISIBILITY_MASK=0x0000000C;=00000001100


拿View中setVisiability(Gone)为例假设旧的值是Visiable=0x00000000


@RemotableViewMethod

publicvoidsetVisibility(intvisibility){

setFlags(visibility,VISIBILITY_MASK);

if(mBGDrawable!=null)mBGDrawable.setVisible(visibility==VISIBLE,false);

}


old保存mViewFlags之前的值,


old和mViewFlags异或后得到一个新的changed凡是为1说明发送了变化,就需要View系统进行调整了!


在setFlag函数中

flags=0x0000000100

intold=mViewFlags;//旧的flag=0x00000000

mViewFlags=(mViewFlags&~mask)|(flags&mask);//新的flag

0x00000000&~(00000001100)|&00000001100=0x0000000100

intchanged=mViewFlags^old;=0x0000000100

if(changed==0){

return;//hey!没有变化!直接return!

}


flags&VISIBILITY_MASK=1

if((flags&VISIBILITY_MASK)==VISIBLE){//不执行显示操作


if((changed&GONE)!=0){//changed&GONE=1

needGlobalAttributesUpdate(false);

requestLayout();//重新布局


if(((mViewFlags&VISIBILITY_MASK)==GONE)){//成立开始清除view的cache重绘

if(hasFocus())clearFocus();

destroyDrawingCache();

if(mParentinstanceofView){

//GONEviewsnoopinvalidation,soinvalidatetheparent

((View)mParent).invalidate(true);

}

//

//

mPrivateFlags|=DRAWN;

}

if(mAttachInfo!=null){

mAttachInfo.mViewVisibilityChanged=true;

}

}

‘肆’ 安卓手机如何打开.wxapkg文件

wxapkg是一个二进制文件,有其自己的一套结构。

wxapkg是微信小程序编译包格式,文件内包含小程序的源码与图像等资源文件。但是这里有个坑,想要进入到上面这个目录的话,用手机自带的文件管理器肯定是不行的,安卓或者iPhone都要要用到第三方的文件管理器,比如:RE文件管理器,并且安卓需要取得root权限。

wxapkg文件的数据格式分成三个部分:

第一部分,文件的前6字节为V1MMWX;第二部分,之后的1024字节为AES CBC加密数据;第三部分,从1024+6之后的所有数据为异或加密的数据。

用UE等十六进制编辑器打开一个wxapkg,会很容易看到三个部分的界限。

文件第二部分的AES CBC加密,使用的key与对应的微信小程序id有关。文件第三部分的异或加密,真就是简单的异或,xorkey为微信小程序id的倒数第二字节的内容。

‘伍’ Android 加密之DES加密

des对称加密,是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码(称为对称密码),是一种对称加密算法。

DES全称Data Encryption Standard,是一种使用密匙加密的块算法。现在认为是一种不安全的加密算法,因为现在已经有用穷举法攻破DES密码的报道了。尽管如此,该加密算法还是运用非常普遍,是一种标准的加密算法。3DES是DES的加强版本。

DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。DES 使用 16 个循环,使用异或,置换,代换,移位操作四种基本运算。

‘陆’ Android加密算法总结

1.概念:
Base64是一种用64个字符(+/)来表示二进制数据的方法,只是一种编码方式,所以不建议使用Base64来进行加密数据。

2.由来:
为什么会有Base64编码呢?因为计算机中数据是按ascii码存储的,而ascii码的128~255之间的值是不可见字符。在网络上交换数据时,比如图片二进制流的每个字节不可能全部都是可见字符,所以就传送不了。最好的方法就是在不改变传统协议的情况下,做一种扩展方案来支持二进制文件的传送,把不可打印的字符也能用可打印字符来表示,所以就先把数据先做一个Base64编码,统统变成可见字符,降低错误率。

3.示例:

加密和解密用到的密钥是相同的,这种加密方式加密速度非常快,适合经常发送数据的场合。缺点是密钥的传输比较麻烦。

1.DES
DES全称为Data Encryption Standard,即数据加密标准,是一种使用 密钥加密 的块算法。
DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位,使得每个密钥都有奇数个1)分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。

2.3DES
3DES(或称为Triple DES)是三重 数据加密算法 (TDEA,Triple Data Encryption Algorithm)块密码的通称。是DES向AES过渡的加密算法,它使用3条56位的密钥对数据进行三次加密。是DES的一个更安全的变形。它以DES为基本模块,通过组合分组方法设计出分组加密算法。比起最初的DES,3DES更为安全。

3.AES
AES全称Advanced Encryption Standard,即高级加密标准,当今最流行的对称加密算法之一,是DES的替代者。支持三种长度的密钥:128位,192位,256位。

AES算法是把明文拆分成一个个独立的明文块,每一个明文块长128bit。这些明文块经过AES加密器的复杂处理,生成一个个独立的密文块,这些密文块拼接在一起,就是最终的AES加密结果。
但是这里涉及到一个问题:假如一段明文长度是192bit,如果按每128bit一个明文块来拆分的话,第二个明文块只有64bit,不足128bit。这时候怎么办呢?就需要对明文块进行填充(Padding):

AES的工作模式,体现在把明文块加密成密文块的处理过程中。

加密和解密用的密钥是不同的,这种加密方式是用数学上的难解问题构造的,通常加密解密的速度比较慢,适合偶尔发送数据的场合。优点是密钥传输方便。

1.SHA
安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的安全散列算法。能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法,且若输入的消息不同,它们对应到不同字符串的机率很高。
SHA分为SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512五种算法,后四者有时并称为SHA-2。SHA-1在许多安全协定中广为使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec,曾被视为是MD5(更早之前被广为使用的杂凑函数)的后继者。但SHA-1的安全性如今被密码学家严重质疑;虽然至今尚未出现对SHA-2有效的攻击,它的算法跟SHA-1基本上仍然相似;因此有些人开始发展其他替代的杂凑算法。

2.RSA
RSA算法1978年出现,是第一个既能用于数据加密也能用于数字签名的算法,易于理解和操作。
RSA基于一个数论事实:将两个大素数相乘十分容易,但想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥。公钥是可提供给任何人使用,私钥则为自己所有,供解密之用。

3.MD5
MD5信息摘要算法 (英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值,用于确保信息传输完整一致。具有如下优点:

XOR:异或加密,既将某个字符或者数值 x 与一个数值 m 进行异或运算得到 y ,则再用 y 与 m 进行异或运算就可还原为 x。
使用场景:
(1)两个变量的互换(不借助第三个变量);
(2)数据的简单加密解密。

‘柒’ 如何使用安卓反编译破解游戏

一、dexmp方法
dexmp是emulator自带提供的查看dex文件的工具,可使用类似这样的命令将dex文件mp到txt文件中:
D:/Program Files/android-sdk-windows-1.6_r1/platforms/android-1.6/tools>dexmp.exe -d classes.dex > spk.mp.txt
得到的文件内容,描述了类的信息,但实在是不好读啊~~~~

二、dex2jar + XJad 方法

该方法是使用dex2jar.jar包,将classes.dex文件解包成jar,在通过XJad(或者其他class反编译工具)进行java反编译。如:
1、dex2jar.bat d:/play/classes.dex
默认的输出路径同classes.dex,生成的文件名为classes.dex.dex2jar.jar
2、使用XJad反编译该jar包
之后的使用方法,大家都懂的:)

该方法的好处在于,通过XJad反编译后,大家可直接开到java源文件,缺点在于只能反编译出开发时的java文件,而开发时使用的lib包不能反编译出来。

三、AXMLPrinter2.jar + baksmali.jar + smali.jar 方法

这个方法就强大了,AXMLPrinter2是还原AndroidManifest.xml和main.xml的工具,直接打开这两个xml文件是乱码,而通过还原之后,可以很明白的看到里面的内容(我猜测还是使用了字节异或的方式加的密)。
baksmali.jar是反解析dex的工具,smali.jar则是再还原成dex的工具
操作方式如下:

1、java -jar AXMLPrinter2.jar D:/play/AndroidManifest.xml > AndroidManifest.txt
2、java -jar AXMLPrinter2.jar D:/play/res/layout/main.xml > main.txt
3、java -jar baksmali-1.2.5.jar -o classout/ d:/play/classes.dex

‘捌’ android中 | 是什么意思

这是沿用JAVA中的位运算符,他表达的意思是A|B同时满足。但是要区分A||B 这种他们是两者只需满足一种即可

‘玖’ 怎么用android studio做异或运算

1、Context说明
Context是一个用于访问全局信息的接口,如应用程序的资源(如图片,字符串等),一些常用的组件继承自Context,如Activity和Service等等。
如利用Java代码创建一个textView,textView的第一种setText()方法直接传入一个字符串,第二种setText()方法传入一个整形的id(位于values\\strings.xml下面的hello_world,即:<string name="hello_world">Hello world!</string>),最后将setContextView改为setContextView(textView)。

[java] view plain
public class MainActivity extends ActionBarActivity {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);

textView=new TextView(MainActivity.this);
//textView.setText("Hello GeoStorm");

textView.setText(R.string.hello_world);

setContentView(textView);
}
}
以上代码中,双击第一个setText()方法,按F4,即可看到该构造函数,入口参数为字符串。

[java] view plain
public final void setText(CharSequence text) {
setText(text, mBufferType);
}
双击第一个setText()方法,按F4,即可看到该构造函数,入口参数为resid,其内部的setText()即为第一个setText()方法,getContext()即为我们创建TextView时传入的MainActivity.this!!!

[java] view plain
public final void setText(int resid) {
setText(getContext().getResources().getText(resid));
}
在看了构造函数之后,我们也可以按照构造函数里的,进行下面的原始写法:

[java] view plain
//textView.setText(R.string.hello_world);
textView.setText(getApplicationContext().getResources().getText(R.string.hello_world));
同样,我们也可以访问图片资源:

[java] view plain
public class MainActivity extends ActionBarActivity {
private TextView textView;
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);

//textView=new TextView(MainActivity.this);
//textView.setText("Hello GeoStorm");
//textView.setText(R.string.hello_world);
//textView.setText(getApplicationContext().getResources().getText(R.string.hello_world));

imageView=new ImageView(this);//可以直接使用this
imageView.setImageResource(R.mipmap.ic_launcher);
setContentView(imageView);
}
}
2、Application的应用及说明
现在我们用Context来实现组件之间信息的共享。创建一个App.java类用来传递数据,继承自Application,增加一个字符串变量,并添加读写构造函数,如下:

[java] view plain
package com.example.lhb.context;

import android.app.Application;

public class App extends Application {
public String S="DefaultString";

public void setS(String s) {
S = s;
}

public String getS() {
return S;
}
}
接下来进行AndroidManifest配置:在Application中加入android:name=".App",并添加另一个Activity,名为Main2。在配置文件中加入跟MainActivity一样的配置,其中 <action android:name="android.intent.action.MAIN" />说明在手机桌面上出现两个应用程序。

[java] view plain
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.lhb.context" >

<application
android:name=".App"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="Main1" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity2Activity"
android:label="Main2" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>
Main1中和Main2加入如下同样的代码:

[java] view plain
package com.example.lhb.context;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;

public class MainActivity extends ActionBarActivity {
private TextView textView;
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

textView= (TextView) findViewById(R.id.textView);
editText= (EditText) findViewById(R.id.editText);

//读取默认的字符串
textView.setText("共享的数据是:"+((App)getApplicationContext()).getS());

findViewById(R.id.btnSave).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((App)getApplicationContext()).setS(editText.getText().toString());
textView.setText(String.format("共享的数据是:%s",editText.getText().toString()));
}
});
}
}
效果如下:

3、Application生命周期
重写构造函数并执行,结果发现App.java的onCreate()函数在任何一个Activity的onCreate()函数之前执行,这对于我们做初始化操作非常有用。

[java] view plain
package com.example.lhb.context;

import android.app.Application;

public class App extends Application {
public String S="DefaultString";

public void setS(String s) {
S = s;
}

public String getS() {
return S;
}

@Override
//创建时执行
public void onCreate() {
super.onCreate();
System.out.println("App OnCreate");
}

@Override
//结束时执行,一般不执行,只在模拟环境中执行
public void onTerminate() {
super.onTerminate();
System.out.println("App on Terminate");
}

@Override
//低内存时执行
public void onLowMemory() {
super.onLowMemory();
}

@Override
//清理内存时执行
public void onTrimMemory(int level) {
super.onTrimMemory(level);
}
}

热点内容
内置存储卡可以拆吗 发布:2025-05-18 04:16:35 浏览:336
编译原理课时设置 发布:2025-05-18 04:13:28 浏览:378
linux中进入ip地址服务器 发布:2025-05-18 04:11:21 浏览:612
java用什么软件写 发布:2025-05-18 03:56:19 浏览:32
linux配置vim编译c 发布:2025-05-18 03:55:07 浏览:107
砸百鬼脚本 发布:2025-05-18 03:53:34 浏览:944
安卓手机如何拍视频和苹果一样 发布:2025-05-18 03:40:47 浏览:741
为什么安卓手机连不上苹果7热点 发布:2025-05-18 03:40:13 浏览:803
网卡访问 发布:2025-05-18 03:35:04 浏览:511
接收和发送服务器地址 发布:2025-05-18 03:33:48 浏览:372