集合結(jié)構(gòu) 線性結(jié)構(gòu) 樹形結(jié)構(gòu) 圖形結(jié)構(gòu)
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),懷仁企業(yè)網(wǎng)站建設(shè),懷仁品牌網(wǎng)站建設(shè),網(wǎng)站定制,懷仁網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,懷仁網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
1.1、集合結(jié)構(gòu) 說白了就是一個集合,就是一個圓圈中有很多個元素,元素與元素之間沒有任何關(guān)系 這個很簡單
1.2、線性結(jié)構(gòu) 說白了就是一個條線上站著很多個人。 這條線不一定是直的。也可以是彎的。也可以是值的 相當(dāng)于一條線被分成了好幾段的樣子 (發(fā)揮你的想象力)。 線性結(jié)構(gòu)是一對一的關(guān)系
1.3、樹形結(jié)構(gòu) 說白了 做開發(fā)的肯定或多或少的知道 xml 解析 樹形結(jié)構(gòu)跟他非常類似。也可以想象成一個金字塔。樹形結(jié)構(gòu)是一對多的關(guān)系
1.4、圖形結(jié)構(gòu) 這個就比較復(fù)雜了。他呢 無窮。無邊 無向(沒有方向)圖形機構(gòu) 你可以理解為多對多 類似于我們?nèi)说慕患P(guān)系
數(shù)據(jù)結(jié)構(gòu)的存儲
數(shù)據(jù)結(jié)構(gòu)的存儲一般常用的有兩種 順序存儲結(jié)構(gòu) 和 鏈式存儲結(jié)構(gòu)
2.1 順序存儲結(jié)構(gòu)
發(fā)揮想象力啊。 舉個列子。數(shù)組。1-2-3-4-5-6-7-8-9-10。這個就是一個順序存儲結(jié)構(gòu) ,存儲是按順序的 舉例說明啊。 棧,做開發(fā)的都熟悉。棧是先進后出 ,后進先出的形式 對不對 ?
他的你可以這樣理解, hello world 在棧里面從棧底到棧頂?shù)倪壿嬕来螢? h-e-l-l-o-w-o-r-l-d 這就是順序存儲,再比如隊列 ,隊列是先進先出的對吧,從頭到尾 h-e-l-l-o-w-o-r-l-d 就是這樣排對的
2.2 鏈式存儲結(jié)構(gòu)
再次發(fā)揮想象力 這個稍微復(fù)雜一點 這個圖片我一直弄好 ,回頭找美工問問,再貼上 例如 還是一個數(shù)組 1-2-3-4-5-6-7-8-9-10 鏈式存儲就不一樣了 1(地址)-2(地址)-7(地址)-4(地址)-5(地址)-9(地址)-8(地址)-3(地址)-6(地址)-10(地址)。每個數(shù)字后面跟著一個地址 而且存儲形式不再是順序 ,也就說順序亂了,1(地址) 1 后面跟著的這個地址指向的是 2,2 后面的地址指向的是 3,3 后面的地址指向是誰你應(yīng)該清楚了吧。他執(zhí)行的時候是 1(地址)-2(地址)-3(地址)-4(地址)-5(地址)-6(地址)-7(地址)-8(地址)-9(地址)-10(地址),但是存儲的時候就是完全隨機的。明白了?
單向鏈表\雙向鏈表\循環(huán)鏈表
還是舉例子。理解最重要。不要去死記硬背 哪些什么。定義啊。邏輯啊。理解才是最重要滴
3.1 單向鏈表
A-B-C-D-E-F-G-H . 這就是單向鏈表 H 是頭 A 是尾 像一個只有一個頭的火車一樣 只能一個頭拉著跑
3.2 雙向鏈表
數(shù)組和鏈表區(qū)別:
數(shù)組:數(shù)組元素在內(nèi)存上連續(xù)存放,可以通過下標查找元素;插入、刪除需要移動大量元素,比較適用元素很少變化的情況
鏈表:鏈表中的元素在內(nèi)存中不是順序存儲的,查找慢,插入、刪除只需要對元素指針重新賦值,效率高
3.3 循環(huán)鏈表
循環(huán)鏈表是與單向鏈表一樣,是一種鏈式的存儲結(jié)構(gòu),所不同的是,循環(huán)鏈表的最后一個結(jié)點的指針是指向該循環(huán)鏈表的第一個結(jié)點或者表頭結(jié)點,從而構(gòu)成一個環(huán)形的鏈。發(fā)揮想象力 A-B-C-D-E-F-G-H-A . 繞成一個圈。就像蛇吃自己的這就是循環(huán) 不需要去死記硬背哪些理論知識。
二叉樹/平衡二叉樹
4.1 什么是二叉樹
樹形結(jié)構(gòu)下,兩個節(jié)點以內(nèi) 都稱之為二叉樹 不存在大于 2 的節(jié)點 分為左子樹 右子樹 有順序 不能顛倒 ,懵逼了吧,你肯定會想這是什么玩意,什么左子樹右子樹 ,都什么跟什么鬼? 現(xiàn)在我以普通話再講一遍,你把二叉樹看成一個人 ,人的頭呢就是樹的根 ,左子樹就是左手,右子樹就是右手,左右手可以都沒有(殘疾嘛,聲明一下,絕非歧視殘疾朋友,勿怪,勿怪就是舉個例子, I am very sorry ) , 左右手呢可以有一個,就是不能顛倒。這樣講應(yīng)該明白了吧
二叉樹有五種表現(xiàn)形式
1.空的樹(沒有節(jié)點)可以理解為什么都沒 像空氣一樣
2.只有根節(jié)點。 (理解一個人只有一個頭 其他的什么都沒,說的有點恐怖)
3.只有左子樹 (一個頭 一個左手 感覺越來越寫不下去了)
4.只有右子樹
5.左右子樹都有
二叉樹可以轉(zhuǎn)換成森林 樹也可以轉(zhuǎn)換成二叉樹。這里就不介紹了 你做項目絕對用不到數(shù)據(jù)結(jié)構(gòu)大致介紹這么多吧。理解為主, 別死記,死記沒什么用
1、不用中間變量,用兩種方法交換 A 和 B 的值
2、****求最大公約數(shù)
3、模擬棧操作
棧是一種數(shù)據(jù)結(jié)構(gòu),特點:先進后出 -
練習(xí):使用全局變量模擬棧的操作
#include stdio.h
#include stdbool.h
#include assert.h
//保護全局變量:在全局變量前加 static 后,這個全局變量就只能在本文件中使用 static int data[1024] ;//棧最多能保存 1024 個數(shù)據(jù)
static int count = 0 ;//目前已經(jīng)放了多少個數(shù)(相當(dāng)于棧頂位置)
4、排序算法
選擇排序、冒泡排序、插入排序三種排序算法可以總結(jié)為如下:
都將數(shù)組分為已排序部分和未排序部分。
1.選擇排序?qū)⒁雅判虿糠侄x在左端,然后選擇未排序部分的最小元素和未排序部分的第一個元素交換。
2.冒泡排序?qū)⒁雅判虿糠侄x在右端,在遍歷未排序部分的過程執(zhí)行交換,將最大元素交換到最右端。
3.插入排序?qū)⒁雅判虿糠侄x在左端,將未排序部分元的第一個元素插入到已排序部分合適的位置。
4.1、選擇排序
【選擇排序】:最值出現(xiàn)在起始端
第 1 趟:在 n 個數(shù)中找到最小(大)數(shù)與第一個數(shù)交換位置
第 2 趟:在剩下 n-1 個數(shù)中找到最小(大)數(shù)與第二個數(shù)交換位置
重復(fù)這樣的操作...依次與第三個、第四個...數(shù)交換位置
第 n-1 趟,最終可實現(xiàn)數(shù)據(jù)的升序(降序)排列。
4.2、冒泡排序
【冒泡排序】:相鄰元素兩兩比較,比較完一趟,最值出現(xiàn)在末尾
第 1 趟:依次比較相鄰的兩個數(shù),不斷交換(小數(shù)放前,大數(shù)放后)逐個推進,最值最后出現(xiàn)在第 n 個元素位置
第 2 趟:依次比較相鄰的兩個數(shù),不斷交換(小數(shù)放前,大數(shù)放后)逐個推進,最值最后出現(xiàn)在第 n-1 個元素位置
…… ……
第 n-1 趟:依次比較相鄰的兩個數(shù),不斷交換(小數(shù)放前,大數(shù)放后)逐個推進,最值最后出現(xiàn)在第 2 個元素位置
5、折半查找(二分查找)
折半查找:優(yōu)化查找時間(不用遍歷全部數(shù)據(jù)) 折半查找的原理:
1.數(shù)組必須是有序的
2.必須已知 min 和 max (知道范圍)
// 已知一個有序數(shù)組, 和一個 key , 要求從數(shù)組中找到 key 對應(yīng)的索引位置
字符串反轉(zhuǎn)
給定字符串 " hello,world ",實現(xiàn)將其反轉(zhuǎn)。輸出結(jié)果: dlrow , olleh
序數(shù)組合并
將有序數(shù)組 {1,4,6,7,9} 和 {2,3,5,6,8,9,10,11,12} 合并為{1,2,3,4,5,6,6,7,8,9,9,10,11,12}
HASH 算法
哈希表
例:給定值是字母 a ,對應(yīng) ASCII 碼值是 97,數(shù)組索引下標為 97。
這里的 ASCII 碼,就算是一種哈希函數(shù),存儲和查找都通過該函數(shù),有效地提高查找效率。
在一個字符串中找到第一個只出現(xiàn)一次的字符。如輸入" abaccdeff ",輸出' b '字符( char )是一個長度為 8 的數(shù)據(jù)類型,因此總共有 256 種可能。每個字母根據(jù)其 ASCII 碼值作為數(shù)組下標對應(yīng)數(shù)組種的一個數(shù)字。數(shù)組中存儲的是每個字符出現(xiàn)的次數(shù)。
查找兩個子視圖的共同父視圖
思路:分別記錄兩個子視圖的所有父視圖并保存到數(shù)組中,然后倒序?qū)ふ?直至找到第一個不一樣的父視圖。
求無序數(shù)組中的中位數(shù)
中位數(shù):當(dāng)數(shù)組個數(shù) n 為奇數(shù)時,為 (n + 1)/2 ,即是最中間那個數(shù)字;當(dāng) n 為偶數(shù)時,為 (n/2 + (n/2 + 1))/2 , 即是中間兩個數(shù)字的平均數(shù)。
首先要先去了解一些幾種排序算法: iOS 排序算法
思路:
1.排序算法+中位數(shù)
首先用冒泡排序、快速排序、堆排序、希爾排序等排序算法將所給數(shù)組排序,然后取出其中位數(shù)即可。
2.利用快排思想
1、簡述 SSL 加密的過程用了哪些加密方法,為何這么作?
SSL 加密的過程之前有些過,此處不再贅述。
SSL 加密,在過程中實際使用了 對稱加密 和 非對稱加密 的結(jié)合。
主要的考慮是先使用 非對稱加密 進行連接,這樣做是為了避免中間人攻擊秘鑰被劫持,但是 非對稱加密的效率比較低。所以一旦建立了安全的連接之后,就可以使用輕量的 對稱加密。
2、RSA 非對稱加密
對稱加密[算法]在加密和解密時使用的是同一個秘鑰;而[非對稱加密算法]需要兩個[密鑰]來進行加密和解密,這兩個秘鑰是[公開密鑰]( public key ,簡稱公鑰)和私有密鑰( private key ,簡稱私鑰)。
RSA 加密
與對稱加密[算法]不同,[非對稱加密算法]需要兩個[密鑰]:[公開密鑰]( publickey )和私有密鑰( privatekey )。公開密鑰與私有密鑰是一對,如果用公開密鑰對數(shù)據(jù)進行加密,只有用對應(yīng)的私有密鑰才能解密;如果用私有密鑰對數(shù)據(jù)進行加密,那么只有用對應(yīng)的公開密鑰才能解密。因為加密和解密使用的是兩個不同的[密鑰],所以這種算法叫作[非對稱加密算法]。
RSA**** 加密原理
RSA 是常用的加密模式,其加密原理可用以下的例子進行簡要的論述。
隨機取兩個質(zhì)數(shù)
以上就是本篇所整理的,感謝觀看!
一、簡單說明
1.說明
在開發(fā)應(yīng)用的時候,數(shù)據(jù)的安全性至關(guān)重要,而僅僅用POST請求提交用戶的隱私數(shù)據(jù),還是不能完全解決安全問題。
如:可以利用軟件(比如Charles)設(shè)置代理服務(wù)器,攔截查看手機的請求數(shù)據(jù)
“青花瓷”軟件
因此:提交用戶的隱私數(shù)據(jù)時,一定不要明文提交,要加密處理后再提交
2.常見的加密算法
MD5 SHA DES 3DES RC2和RC4 RSA IDEA DSA AES
3.加密算法的選擇
一般公司都會有一套自己的加密方案,按照公司接口文檔的規(guī)定去加密
二、MD5
1.簡單說明
MD5:全稱是Message Digest Algorithm 5,譯為“消息摘要算法第5版”
效果:對輸入信息生成唯一的.128位散列值(32個字符)
2.MD5的特點
(1)輸入兩個不同的明文不會得到相同的輸出值
(2)根據(jù)輸出值,不能得到原始的明文,即其過程不可逆
3.MD5的應(yīng)用
由于MD5加密算法具有較好的安全性,而且免費,因此該加密算法被廣泛使用
主要運用在數(shù)字簽名、文件完整性驗證以及口令加密等方面
4.MD5破解
MD5解密網(wǎng)站:
5.MD5改進
現(xiàn)在的MD5已不再是絕對安全,對此,可以對MD5稍作改進,以增加解密的難度
加鹽(Salt):在明文的固定位置插入隨機串,然后再進行MD5
先加密,后亂序:先對明文進行MD5,然后對加密得到的MD5串的字符進行亂序
總之宗旨就是:黑客就算攻破了數(shù)據(jù)庫,也無法解密出正確的明文
代碼示例:
復(fù)制代碼 代碼如下:
#import "HMViewController.h"
#import "NSString+Hash.h"
#define Salt @"fsdhjkfhjksdhjkfjhkd546783765"
@interface HMViewController ()
@end
@implementation HMViewController
- (void)viewDidLoad
{
[super viewDidLoad];
[self digest:@"123"]; //
[self digest:@"abc"];
[self digest:@"456"];
}
/**
* 直接用MD5加密
*/
- (NSString *)digest:(NSString *)str
{
NSString *anwen = [str md5String];
NSLog(@"%@ - %@", str, anwen);
return anwen;
}
/**
* 加鹽
*/
- (NSString *)digest2:(NSString *)str
{
str = [str stringByAppendingString:Salt];
NSString *anwen = [str md5String];
NSLog(@"%@ - %@", str, anwen);
return anwen;
}
/**
* 多次MD5
*/
- (NSString *)digest3:(NSString *)str
{
NSString *anwen = [str md5String];
anwen = [anwen md5String];
NSLog(@"%@ - %@", str, anwen);
return anwen;
}
/**
* 先加密, 后亂序
*/
- (NSString *)digest4:(NSString *)str
{
NSString *anwen = [str md5String];
// 注冊: 123 ---- 2CB962AC59075B964B07152D234B7020
// 登錄: 123 --- 202CB962AC59075B964B07152D234B70
NSString *header = [anwen substringToIndex:2];
NSString *footer = [anwen substringFromIndex:2];
anwen = [footer stringByAppendingString:header];
NSLog(@"%@ - %@", str, anwen);
return anwen;
}
@end
(1)直接使用MD5加密(去MD5解密網(wǎng)站即可破解)
(2)使用加鹽(通過MD5解密之后,很容易發(fā)現(xiàn)規(guī)律)
(3)多次MD5加密(使用MD5解密之后,發(fā)現(xiàn)還是密文,那就接著MD5解密)
(4)先加密,后亂序(破解難度增加)
三、注冊和驗證的數(shù)據(jù)處理過程
1.提交隱私數(shù)據(jù)的安全過程 – 注冊
2.提交隱私數(shù)據(jù)的安全過程 – 登錄
對ios應(yīng)用加固有兩種實現(xiàn)方式。
一種使用安全編譯器
基于LLVM編譯器中間層實現(xiàn)?;?LLVM 的保護方案,在使用時需要更換已有的編譯環(huán)境,替換編譯器,調(diào)整編譯選項等,對開發(fā)環(huán)境造成了很多影響,易用性差。從保護效果上看,基于 LLVM 的保護方案,受限于編譯器框架,生成的代碼只能做邏輯上的混淆變換,仍然可以被反編譯,對控制流的混淆效果有限,且邊界清晰,更容易被分析。
反編譯效果
OLLVM 保護后反編譯效果:
一種使用VirboxProtector 虛擬化保護。
ARM 虛擬化是 Virbox Protector 針對 ARM 架構(gòu)的指令推出的虛擬機保護方式,通過將原始的 ARM 指令進行翻譯,轉(zhuǎn)換為自定義的虛擬機指令,運行時在自定義虛擬機執(zhí)行。Virbox Protector 實現(xiàn)了針對 ARM 指令的虛擬機保護工具,支持對armv7(包括 thumb, thumb2),及 armv8 以上指令集進行翻譯,安全強度高,適用于需要高安全性的代碼保護需求。通過虛擬化保護后的代碼無法被反編譯。
Virbox Protector 保護后反編譯效果:
在開發(fā)中經(jīng)常會遇到數(shù)據(jù)的加密,常見的有base64、DES、AES、RSA等,由于AES的用法相對簡單一些,在公司的項目中,我們使用的是AES加密。但是遇到一個大坑就是后臺使用了AES的128/CBC/NoPadding加密模式,很可悲的是iOS中只有PKCS7Padding和PKCS5Padding這兩種模式,沒有NoPadding模式。經(jīng)過各種百度、谷歌后,終于發(fā)現(xiàn)了一篇文章解決了這個問題。
下面是參考文章的鏈接 :
問題就處在No Padding. No Pading的情況下,一定要對加密數(shù)據(jù)不是kCCKeySizeAES128倍數(shù)部分進行0x0000的填充,不然加密長度不正確,一般情況下選擇使用kCCOptionPKCS7Padding(也就是0x0001)進行填充,但是我們是No Padding所以要用 0x0000 填充。
網(wǎng)站欄目:加密ios開發(fā),應(yīng)用加密ios
當(dāng)前URL:http://m.rwnh.cn/article44/dscoeee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、外貿(mào)建站、App開發(fā)、網(wǎng)站設(shè)計、網(wǎng)站維護、域名注冊
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)