1. 程式人生 > >Android資料加密之異或加密演算法

Android資料加密之異或加密演算法

前言:

      這幾天被公司臨時拉到去做Android IM即時通訊協議實現,大致看了下他們定的協議,由於之前沒有參與,據說因伺服器效能限制,只達成非明文傳遞,具體原因我不太清楚,不過這裡用的加密方式是採用異或加密。這種加密方式在之前做Android加密記事本的時候採用過這種加密方式。今天已經把客戶端心跳維持、資料包解析對接完了,總結一下這種加密方式。

    其他幾種加密方式:

什麼是異或加密?

      異或運算中,如果某個字元(或數值)x 與 一個數值m 進行異或運算得到y,則再用y 與 m 進行異或運算就可以還原為 x ,因此應用這個原理可以實現資料的加密解密功能。

異或運算使用場景?

  • 兩個變數的互換(不借助第三個變數)

  • 資料的簡單加密解密

異或加密解密實現?

1.固定key的方式

這種方式加密解密 演算法一樣

    public byte[] encrypt(byte[] bytes) {
        if (bytes == null) {
            return null;
        }
        int len = bytes.length;
        int key = 0x12;
        for (int i = 0; i < len; i++) {
            bytes[i] ^= key;
        }
        
return bytes; }

測試加密解密

 byte[] bytes = encrypt("whoislcj".getBytes());//加密
 String str1 = new String(encrypt(bytes));//解密

2.不固定key的方式

 加密實現

    public byte[] encrypt(byte[] bytes) {
        if (bytes == null) {
            return null;
        }
        int len = bytes.length;
        int key = 0x12;
        
for (int i = 0; i < len; i++) { bytes[i] = (byte) (bytes[i] ^ key); key = bytes[i]; } return bytes; }

解密實現

  public byte[] decrypt(byte[] bytes) {
        if (bytes == null) {
            return null;
        }
        int len = bytes.length;
        int key = 0x12;
        for (int i = len - 1; i > 0; i--) {
            bytes[i] = (byte) (bytes[i] ^ bytes[i - 1]);
        }
        bytes[0] = (byte) (bytes[0] ^ key);
        return bytes;
    }

測試

    byte[] bytes = encrypt("whoislcj".getBytes());//加密
    String str1 = new String(decrypt(bytes));//解密

總結:

  位運算可以實現很多高階,高效的運算。比如說加密,乘法中的n次方就是右移n位,速度還快。IM二進位制資料包採用異或演算法第一能夠實現加密,第二採用異或加密演算法不會改變二進位制資料的長度這對二進位制資料包封包起到不小的好處。故作此總結。

相關推薦

Android資料加密加密演算法

前言:       這幾天被公司臨時拉到去做Android IM即時通訊協議實現,大致看了下他們定的協議,由於之前沒有參與,據說因伺服器效能限制,只達成非明文傳遞,具體原因我不太清楚,不過這裡用的加密方式是採用異或加密。這種加密方式在之前做Android加密記事本的時候採用過這種加密方式。今天已經把客戶端心跳

Android資料加密 ---- 加密

前言: 對於異或加密,在博文 異或加密 已經有了詳細說明,這邊博文將其用Android 實現。 例項: Activity 中新增兩個呼叫的程式碼: private void test

python:加密演算法

def encode(plaintext,key): key = key * (len(plaintext) // len(key)) + key[:len(plaintext) % len(key)]#取整數/餘數 ciphertext=[] for i in range(

一個最簡單的加密解密演算法 人人能懂 加密

                #include <iostream>// KEY 非常重要,不能對公眾洩露KEY值// 傳送端和接收端提前祕密約定好KEY值#define KEY 1313113 // 萬歲萬歲萬萬歲using namespace std;// 加密演算法可以公開int encr

Android資料儲存Sqlite採用SQLCipher資料庫加密實戰

前言:   最近研究了Android Sqlite資料庫(文章地址:http://www.cnblogs.com/whoislcj/p/5506294.html)以及ContentProvider程式間資料共享(http://www.cnblogs.com/whoislcj/p/5507928.html),

C# 簡單的加密文字檔案字串

一、加解密字串 1、加密方法:將原字串與加密字元進行異或 1 private char[] Encrypt(string content, string secretKey) 2 { 3 char[] data = content.ToCharArray(); 4 char[

C# 簡單的加密文本文件字符串

file dal for 字符數 text -s get ron turn 一、加解密字符串 1、加密方法:將原字符串與加密字符進行異或 1 private char[] Encrypt(string content, string secretKey) 2 { 3

簡單加密處理

異或的理解: 將十進位制轉換成二進位制進行異或,相同的為0 ,不相同的為1,可以看下圖理解,異或之後得出的二進位制再轉十進位制,之後的就是異或後的值 斷點檢視過程: 異或前: 異或後: Java版程式碼: private static byte[] ke

IOS 加密

-(NSString *)obfuscate:(NSString *)string withKey:(NSString *)key {          NSData* bytes = [string dataUsingEncoding:NSUTF8StringEncodi

XOR 加密簡介

XOR 加密簡介 本文介紹一種簡單高效、非常安全的加密方法:XOR 加密。 一、 XOR 運算 邏輯運算之中,除了 AND 和 OR,還有一種 XOR 運算,中文稱為"異或運算"。 它的定義是:兩個值相同時,返回false,否則返回true。也就是說,XOR可以

HMACSHA1加密java跟js演算法實現

HMACSHA1 是從 SHA1 雜湊函式構造的一種演算法,用於 HMAC。通過一個共有祕鑰將加密字串與其混合生成一個新的雜湊串。 android實現 public static byte[] hmacSHA1Encrypt(Stri

Android 資料儲存 SQLite資料庫儲存

轉載自:https://www.cnblogs.com/woider/p/5136734.html ----------------------------------------SQLite資料庫---------------------------------------------- SQLite是一

認清C/C++程式設計-----運算

使用異或進行資料交換,很早以前有的程式設計師使用下面的方法進行兩個資料之間的交換       a^=b;b^=a;a^=b;即a^=b^=a^=b;只有在兩個比較的位不同時其結果為1,否則為0即[兩個輸入相同時為0,不同時為1] &nbs

混淆演算法

一:使用場景     當需求對資料的傳輸有不高的安全加密,且加密的時間複雜度越低越好,這時我們可以使用簡單的混淆演算法(我認為混淆演算法本質上就是一種簡單的加密演算法)。     本文所做的演算法是python寫的異或混淆演算法。

資料結構python實現冒泡演算法(bubblesort)

1.氣泡排序思想 比較相鄰的元素。如果第一個比第二個大(升序),就交換他們兩個。 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。 針對所有的元素重複以上的步驟,除了最後一個。 持續每次對越來越少的元素重複上面的

Android資料儲存SQLite簡單用法

實現效果圖如下: activity_main.xml佈局檔案 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/a

Android 資料儲存File

public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { sup

R語言與資料分析三:分類演算法2

上期與大家分享的傳統分類演算法都是建立在判別函式的基礎上,通過判別函式值來確定目標樣本所屬的分類,這類演算法有個最基本的假設:線性假設。今天繼續和大家分享下比較現代的分類演算法:決策樹和神經網路。這兩個演算法都來源於人工智慧和機器學習學科。 首先和小夥伴介紹下資料探勘領域比

Android資料儲存File

檔案儲存分為兩種: (1)內部儲存:  存放路徑為/data/data/package_name/files/ (2)外部儲存:  SD卡 (3)擴充對資源xml檔案的操作 一、內部儲存 1.兩個函式openFileOutput  寫入  許可權:MODE_PRIVATE,

Android資料儲存SharedPreferences詳細總結

Android中常見的幾種儲存方式: SharedPreferences SQLite資料庫儲存 檔案儲存 網路儲存 其中也許最常用的就是SharedPreferences儲存和檔案儲存了,今天總結一下SharedPreferences。帶著問題學習Sh