異或加密解密

異或,英文為exclusive OR,或縮寫成xor
異或(xor)是一個數學運算符。它應用于邏輯運算。異或的數學符號為“⊕”,計算機符號為“xor”。其運算法則為: a⊕b = (?a ∧
b) ∨ (a ∧?b) 如果a、b兩個值不相同,則異或結果為1。如果a、b兩個值相同,異或結果為0。
異或也叫半加運算,其運算法則相當于不帶進位的二進制加法:二進制下用1表示真,0表示假,則異或的運算法則為:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同為0,異為1),這些法則與加法是相同的,只是不帶進位。
異或略稱為XOR、EOR、EX-OR 程序中有三種演算子:XOR、xor、⊕。 使用方法如下 z = x ⊕ y z = x xor y

MD5加密算法:http://blog.csdn.net/huangxiaoguo1/article/details/78042596

Base64加密解密:http://blog.csdn.net/huangxiaoguo1/article/details/78042715

異或加密解密:http://blog.csdn.net/huangxiaoguo1/article/details/78042802

DES加密解密:http://blog.csdn.net/huangxiaoguo1/article/details/78042908

AES自動生成base64密鑰加密解密:http://blog.csdn.net/huangxiaoguo1/article/details/78043000

AES加密解密(ECB模式):http://blog.csdn.net/huangxiaoguo1/article/details/78043098

AES加密解密(CBC模式):http://blog.csdn.net/huangxiaoguo1/article/details/78043169

非對稱RSA加密解密:http://blog.csdn.net/huangxiaoguo1/article/details/78043354

運算法則

  1. a ⊕ a = 0
  2. a ⊕ b = b ⊕ a
  3. a ⊕b ⊕ c = a ⊕ (b ⊕ c) = (a ⊕ b) ⊕ c;
  4. d = a ⊕ b ⊕ c 可以推出 a = d ⊕ b ⊕ c.
  5. a ⊕ b ⊕ a = b.
    6.若x是二進制數0101,y是二進制數1011; 則x⊕y=1110 只有在兩個比較的位不同時其結果是1,否則結果為0 即“兩個輸入相同時為0,不同則為1”!

效果

這里寫圖片描述

代碼

ORActivity



import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import tsou.com.encryption.R;
import tsou.com.encryption.aescbc.Base64Decoder;
import tsou.com.encryption.aescbc.Base64Encoder;
import tsou.com.encryption.or.OrUtils;

/**
 * 一、什么是異或加密?
 * <p>
 * 異或運算中,如果某個字符(或數值)x 與 一個數值m 進行異或運算得到y,則再用y 與 m 進行異或運算就可以還原為 x ,
 * 因此應用這個原理可以實現數據的加密解密功能。
 * <p>
 * 二、異或運算使用場景?
 * <p>
 * 兩個變量的互換(不借助第三個變量)
 * <p>
 * 數據的簡單加密解密
 */
public class ORActivity extends AppCompatActivity implements View.OnClickListener {

    private EditText encryptionContext;
    private Button encryption;
    private TextView tvEncryption;
    private Button decode;
    private TextView tvDecode;
    private Activity mActivity;
    private Context mContext;
    private Button encryptionNotFixed;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_or);
        mActivity = this;
        mContext = this;
        encryptionContext = (EditText) findViewById(R.id.et_encryption_context);
        encryption = (Button) findViewById(R.id.btn_encryption);
        encryptionNotFixed = (Button) findViewById(R.id.btn_encryption_not_fixed);
        tvEncryption = (TextView) findViewById(R.id.tv_encryption);
        decode = (Button) findViewById(R.id.btn_decode);
        tvDecode = (TextView) findViewById(R.id.tv_decode);
        initListener();
    }

    private void initListener() {
        encryption.setOnClickListener(this);
        encryptionNotFixed.setOnClickListener(this);
        decode.setOnClickListener(this);
    }

    private boolean isEncryption = true;

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn_encryption://固定加密
                String encryptionString = encryptionContext.getText().toString().trim();

                if (TextUtils.isEmpty(encryptionString)) {
                    Toast.makeText(mContext, "請輸入加密內容", Toast.LENGTH_SHORT).show();
                    return;
                }
                byte[] encode = OrUtils.encrypt(encryptionString.getBytes());
                tvEncryption.setText(Base64Encoder.encode(encode));
                isEncryption = true;
                break;

            case R.id.btn_encryption_not_fixed://不固定加密
                String encryptionStringNotFixed = encryptionContext.getText().toString().trim();
                if (TextUtils.isEmpty(encryptionStringNotFixed)) {
                    Toast.makeText(mContext, "請輸入加密內容", Toast.LENGTH_SHORT).show();
                    return;
                }
                byte[] encodeNotFixed = OrUtils.encode(encryptionStringNotFixed.getBytes());
                tvEncryption.setText(Base64Encoder.encode(encodeNotFixed));
                isEncryption = false;
                break;

            case R.id.btn_decode://解密

                String decodeString = tvEncryption.getText().toString().trim();
                if (TextUtils.isEmpty(decodeString)) {
                    Toast.makeText(mContext, "請先加密", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (isEncryption) {
                    byte[] encrypt = OrUtils.encrypt(Base64Decoder.decodeToBytes(decodeString));
                    tvDecode.setText(new String(encrypt));
                } else {
                    byte[] decode = OrUtils.decode(Base64Decoder.decodeToBytes(decodeString));
                    tvDecode.setText(new String(decode));
                }


                break;
        }
    }
}

OrUtils



/**
 * Created by Administrator on 2017/9/20 0020.
 */

public class OrUtils {

    private final static int orKey = 0x520;

    /**
     * 固定key的方式,
     * <p>
     * 這種方式加密解密 算法一樣
     *
     * @param bytes
     * @return
     */
    public static byte[] encrypt(byte[] bytes) {
        if (bytes == null) {
            return null;
        }
        int len = bytes.length;
        int key = orKey;
        //int key = 0x12;
        for (int i = 0; i < len; i++) {
            bytes[i] ^= key;
        }
        return bytes;
    }

    /**
     * 不固定key的方式
     * <p>
     * 加密實現
     *
     * @param bytes
     * @return
     */
    public static byte[] encode(byte[] bytes) {
        if (bytes == null) {
            return null;
        }
        int len = bytes.length;
        int key = orKey;
        //int key = 0x12;
        for (int i = 0; i < len; i++) {
            bytes[i] = (byte) (bytes[i] ^ key);
            key = bytes[i];
        }
        return bytes;
    }

    /**
     * 不固定key的方式
     * <p>
     * 解密實現
     *
     * @param bytes
     * @return
     */
    public static byte[] decode(byte[] bytes) {
        if (bytes == null) {
            return null;
        }
        int len = bytes.length;
        //int key = 0x12;
        int key = orKey;
        for (int i = len - 1; i > 0; i--) {
            bytes[i] = (byte) (bytes[i] ^ bytes[i - 1]);
        }
        bytes[0] = (byte) (bytes[0] ^ key);
        return bytes;
    }
}

Demo下載地址:java-android:AES加密,RAS加密,DES加密,MD5加密,Base64加密,異或加密

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,431評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,637評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,555評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,900評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,629評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,976評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,976評論 3 448
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,139評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,686評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,411評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,641評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,129評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,820評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,233評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,567評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,362評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,604評論 2 380

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,760評論 25 708
  • 在此特此聲明:一下所有鏈接均來自互聯網,在此記錄下我的查閱學習歷程,感謝各位原創作者的無私奉獻 ! 技術一點一點積...
    遠航的移動開發歷程閱讀 11,178評論 12 197
  • 高級加密標準(英語:Advanced EncryptionStandard,縮寫:AES),在密碼學中又稱Rijn...
    黃曉果閱讀 11,100評論 0 2
  • 我們出發吧 在晨光還沒有穿透 云層的手掌 一路疾行 涼涼的風把衣角卷成一朵花 或者趁著黑夜 當月光還盛開在 別人家...
    小紅帽_8c52閱讀 260評論 0 0
  • ?﹏﹏??……… 《夢囈》 ――花想容 2017...
    蘇翊翔閱讀 294評論 1 0