當前位置:首頁 » 安卓系統 » 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 瀏覽:945
安卓手機如何拍視頻和蘋果一樣 發布:2025-05-18 03:40:47 瀏覽:742
為什麼安卓手機連不上蘋果7熱點 發布:2025-05-18 03:40:13 瀏覽:803
網卡訪問 發布:2025-05-18 03:35:04 瀏覽:511
接收和發送伺服器地址 發布:2025-05-18 03:33:48 瀏覽:372