iOS 逆向与安全

iOS逆向与安全1.1 :HASH、对称加密

2019-04-19  本文已影响0人  looha

HASH

简述:

Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数

特点

用途

对称加密

简述:

对称加密方式:明文通过密钥加密得到密文。密文通过密钥解密得到明文。

常见算法

特点:安全
明文被加密前要与前面的密文进行异或运算后再加密,因此只要选择不同的初始向量,相同的密文加密后会形成不同的密文,这是目前应用最广泛的模式。CBC加密后的密文是上下文相关的,但明文的错误不会传递到后续分组,但如果一个分组丢失,后面的分组将全部作废(同步错误)

CBC可以有效的保证密文的完整性,如果一个数据块在传递是丢失或改变,后面的数据将无法正常解密

PS:异或运算

异或,英文为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

与其它语言不同,C语言和C++语言的异或不用xor,而是用“^”,键入方式为Shift+6。(而其它语言的“^”一般表示乘方)
若需要交换两个变量的值,除了通常使用的借用中间变量进行交换外,还可以利用异或,仅使用两个变量进行交换,如:
void swap(int &a,int &b)
{
    a=a^b;
    b=b^a;
    a=a^b;
}
详解:
a1=a^b
 
b=b^a1=b^a^b=a
//此时a1=a^b  b=a
a=a1^b=a^b^a=b
注意:
1
a=a^b^(b=a);//此类形式是不正确的UB行为,在不同编译器中会有不同的结果,切勿使用
这样就完成了a与b的交换。
综上:同一变量与另一变量和其异或值异或等于另一个数,如(a^b)^b=a。
用例:可使用于加密算法某一环节或更多环节,使算法更复杂,不易被破解,安全性更高。

终端命令:

•加密:

•AES(ECB)加密“hello”字符串

$ echo -n hello | openssl enc-aes-128-ecb -K 616263 -nosalt |base64

•AES(CBC)加密“hello”字符串

•$ echo -n hello | openssl enc-aes-128-cbc -iv 0102030405060708 -K 616263 -nosalt |base64

•解密:

•AES(ECB)解密

•$echo -n d1QG4T2tivoi0Kiu3NEmZQ== | base64 -D | openssl enc-aes-128-ecb -K 616263 -nosalt –d

•AES(CBC)解密

$ echo -nu3W/N816uzFpcg6pZ+kbdg== | base64 -D | openssl enc-aes-128-cbc -iv 0102030405060708 -K 616263 -nosalt –d

CCCrypt函数 数据加密之前,对数据本身处理一下,异或等等,

上一篇 下一篇

猜你喜欢

热点阅读