① 移動端與後端數據傳輸加密
對稱加密:對稱加密加密與解密使用的是同樣的密鑰,所以速度快,但由於需要將密鑰在網路傳輸,所以安全性不高
非對稱加密:非對稱加密使用了一對密鑰,公鑰與私鑰,所以安全性高,但加密與解密速度慢。
方案:將對稱加密的密鑰使用非對稱加密的公鑰進行加密,然後發送出去,接收方使用私鑰進行解密得到對稱加密的密鑰,然後雙方可以使用對稱加密來進行溝通。
方案的流程介紹:
1、APP客戶端需要和伺服器進行數據交互,它的APP首先生成了一個隨機數作為對稱密鑰(比如AES加密的密鑰)。
2、APP客戶端向伺服器請求公鑰
3、伺服器將公鑰發送給APP客戶端
4、APP客戶端使用伺服器的公鑰將自己的對稱密鑰(比如AES加密的密鑰)加密
5、APP客戶端將加密後的對稱密鑰發送給伺服器
6、伺服器使用私鑰解密得到APP客戶端的對稱密鑰
7、APP客戶端與伺服器可以使用對稱密鑰來對溝通的內容進行加密與解密了
App端和後台數據加密分兩部分:
1.數據傳輸的時候加密 (一般採用Https協議在傳輸層加密)
2.數據本身的加密 (使用各種加密演算法)
RSA非對稱加密:公鑰加密,私鑰解密。公鑰私鑰由服務端生成,公鑰放在客戶端私密保存,私鑰放在服務端。安全性高,運算速度慢
AES對成加密:運算速度快切安全性高
上面網路通信過程是安全的,可以保證通信數據即使被截取了,也無法獲得任何有效信息;即使被篡改了,也無法被客戶端和服務端驗證通過。
具體可參考的博文:(記得後續實踐哦)
https://blog.csdn.net/wangjiang_qianmo/article/details/88073848?utm_medium=distribute.pc_relevant.none-task-blog--1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog--1.channel_param
② 如何實現https加密傳輸
1、生成證書請求文件CSR
用戶進行https證書申請的第一步就是要生成CSR證書請求文件,系統會產生2個密鑰,一個是公鑰就是這個CSR文件,另外一個是私鑰,存放在伺服器上。要生成CSR文件,站長可以參考WEB SERVER的文檔,一般APACHE等,使用OPENSSL命令行來生成KEY+CSR2個文件,Tomcat,JBoss,Resin等使用KEYTOOL來生成JKS和CSR文件,IIS通過向導建立一個掛起的請求和一個CSR文件。
溫馨提醒:如果是在沃通申請https證書,其數字證書商店(https://buy.wosign.com)已經支持CSR文件由系統自動生成,用戶無需事先在Web伺服器上生成CSR文件。請參考:SSL證書請求文件(CSR)生成指南網頁鏈接
2、將CSR提交給CA機構認證
CA機構一般有2種認證方式:
(1)域名認證,一般通過對管理員郵箱認證的方式,這種方式認證速度快,但是簽發的證書中沒有企業的名稱,只顯示網站域名,也就是我們經常說的域名型https證書。
(2)企業文檔認證,需要提供企業的營業執照。國外https證書申請CA認證一般一小時之內,緊急時5分鍾。
同時認證以上2種方式的證書,叫EV https證書,EV https證書可以使瀏覽器地址欄變成綠色,所以認證也最嚴格。EV https證書多應用於金融、電商、證券等對信息安全保護要求較高的領域。
3、獲取https證書並安裝
在收到CA機構簽發的https證書後,將https證書部署到伺服器上,一般APACHE文件直接將KEY+CER復制到文件上,然後修改HTTPD.CONF文件;TOMCAT等需要將CA簽發的證書CER文件導入JKS文件後,復制到伺服器,然後修改SERVER.XML;IIS需要處理掛起的請求,將CER文件導入。
③ 網路數據加密主要有哪三種方式
一般的數據加密可以在通信的三個層次來實現:鏈路加密、節點加密和端到端加密。
1.鏈路加密
對於在兩個網路節點間的某一次通信鏈路,鏈路加密能為網上傳輸的數據提供安全保證。對於鏈路加密(又稱在線加密),所有消息在被傳輸之前進行加密,在每一個節點對接收到的消息進行解密,然後先使用下一個鏈路的密鑰對消息進行加密,再進行傳輸。在到達目的地之前,一條消息可能要經過許多通信鏈路的傳輸。
2.節點加密
盡管節點加密能給網路數據提供較高的安全性,但它在操作方式上與鏈路加密是類似的:兩者均在通信鏈路上為傳輸的消息提供安全性;都在中間節點先對消息進行解密,然後進行加密。因為要對所有傳輸的數據進行加密,所以加密過程對用戶是透明的。
3.端到端加密
端到端加密允許數據在從源點到終點的傳輸過程中始終以密文形式存在。採用端到端加密(又稱脫線加密或包加密),消息在被傳輸時到達終點之前不進行解密,因為消息在整個傳輸過程中均受到保護,所以即使有節點被損壞也不會使消息泄露。
④ ios 中開發中用戶信息中的加密方式有哪些
5.1 通過簡單的URLENCODE + BASE64編碼防止數據明文傳輸
5.2 對普通請求、返回數據,生成MD5校驗(MD5中加入動態密鑰),進行數據完整性(簡單防篡改,安全性較低,優點:快速)校驗。
5.3 對於重要數據,使用RSA進行數字簽名,起到防篡改作用。
5.4 對於比較敏感的數據,如用戶信息(登陸、注冊等),客戶端發送使用RSA加密,伺服器返回使用DES(AES)加密。
原因:客戶端發送之所以使用RSA加密,是因為RSA解密需要知道伺服器私鑰,而伺服器私鑰一般盜取難度較大;如果使用DES的話,可以通過破解客戶端獲取密鑰,安全性較低。而伺服器返回之所以使用DES,是因為不管使用DES還是RSA,密鑰(或私鑰)都存儲在客戶端,都存在被破解的風險,因此,需要採用動態密鑰,而RSA的密鑰生成比較復雜,不太適合動態密鑰,並且RSA速度相對較慢,所以選用DES)
把相關演算法的代碼也貼一下吧 (其實使用一些成熟的第三方庫或許會來得更加簡單,不過自己寫,自由點)。注,這里的大部分加密演算法都是參考一些現有成熟的演算法,或者直接拿來用的。
1、MD5
//因為是使用category,所以木有參數傳入啦
-(NSString *) stringFromMD5 {
if(self == nil || [self length] == 0) {
return nil;
}
const char *value = [self UTF8String];
unsigned char outputBuffer[CC_MD5_DIGEST_LENGTH];
CC_MD5(value, strlen(value), outputBuffer);
NSMutableString *outputString = [[NSMutableString alloc] initWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
for(NSInteger count = 0; count < CC_MD5_DIGEST_LENGTH; count++){
[outputString appendFormat:@"%02x",outputBuffer[count]];
}
return [outputString autorelease];
}
2、Base64
+ (NSString *) base64EncodeData: (NSData *) objData {
const unsigned char * objRawData = [objData bytes];
char * objPointer;
char * strResult;
// Get the Raw Data length and ensure we actually have data
int intLength = [objData length];
if (intLength == 0) return nil;
// Setup the String-based Result placeholder and pointer within that placeholder
strResult = (char *)calloc(((intLength + 2) / 3) * 4, sizeof(char));
objPointer = strResult;
// Iterate through everything
while (intLength > 2) { // keep going until we have less than 24 bits
*objPointer++ = _base64EncodingTable[objRawData[0] >> 2];
*objPointer++ = _base64EncodingTable[((objRawData[0] & 0x03) << 4) + (objRawData[1] >> 4)];
*objPointer++ = _base64EncodingTable[((objRawData[1] & 0x0f) << 2) + (objRawData[2] >> 6)];
*objPointer++ = _base64EncodingTable[objRawData[2] & 0x3f];
// we just handled 3 octets (24 bits) of data
objRawData += 3;
intLength -= 3;
}
// now deal with the tail end of things
if (intLength != 0) {
*objPointer++ = _base64EncodingTable[objRawData[0] >> 2];
if (intLength > 1) {
*objPointer++ = _base64EncodingTable[((objRawData[0] & 0x03) << 4) + (objRawData[1] >> 4)];
*objPointer++ = _base64EncodingTable[(objRawData[1] & 0x0f) << 2];
*objPointer++ = '=';
} else {
*objPointer++ = _base64EncodingTable[(objRawData[0] & 0x03) << 4];
*objPointer++ = '=';
*objPointer++ = '=';
}
}
// Terminate the string-based result
*objPointer = '\0';
NSString *rstStr = [NSString stringWithCString:strResult encoding:NSASCIIStringEncoding];
free(objPointer);
return rstStr;
}
3、AES
-(NSData*) EncryptAES: (NSString *) key {
char keyPtr[kCCKeySizeAES256+1];
bzero(keyPtr, sizeof(keyPtr));
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
NSUInteger dataLength = [self length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128,
kCCOptionPKCS7Padding | kCCOptionECBMode,
keyPtr, kCCBlockSizeAES128,
NULL,
[self bytes], dataLength,
buffer, bufferSize,
&numBytesEncrypted);
if (cryptStatus == kCCSuccess) {
return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
}
free(buffer);
return nil;
}
4、RSA
- (NSData *) encryptWithData:(NSData *)content {
size_t plainLen = [content length];
if (plainLen > maxPlainLen) {
NSLog(@"content(%ld) is too long, must < %ld", plainLen, maxPlainLen);
return nil;
}
void *plain = malloc(plainLen);
[content getBytes:plain
length:plainLen];
size_t cipherLen = 128; // currently RSA key length is set to 128 bytes
void *cipher = malloc(cipherLen);
OSStatus returnCode = SecKeyEncrypt(publicKey, kSecPaddingPKCS1, plain,
plainLen, cipher, &cipherLen);
NSData *result = nil;
if (returnCode != 0) {
NSLog(@"SecKeyEncrypt fail. Error Code: %ld", returnCode);
}
else {
result = [NSData dataWithBytes:cipher
length:cipherLen];
}
free(plain);
free(cipher);
return result;
}
⑤ HTTPS 到底加密了些什麼內容
https其實是有兩部分組成:http + SSL / TLS,也就是在http上又加了一層處理加密信息的模塊。服務端和客戶端的信息傳輸都會通過TLS進行加密,所以傳輸的數據都是加密後的數據。具體是如何進行加密,解密,驗證的,且看下圖。
1. 客戶端發起https請求
客戶端發起https請求就是指用戶在瀏覽器里輸入一個https網址,然後連接到server的443埠。
2. 伺服器端的配置
採用https協議的伺服器必須要有一套SSL數字證書,需要向CA組織(如WoSign沃通CA)申請。這套SSL證書其實就是一對公鑰和私鑰。如果對公鑰和私鑰不太理解,可以想像成一把鑰匙和一個鎖頭,只是全世界只有你一個人有這把鑰匙,你可以把鎖頭給別人,別人可以用這個鎖把重要的東西鎖起來,然後發給你,因為只有你一個人有這把鑰匙,所以只有你才能看到被這把鎖鎖起來的東西。
3. 傳送證書
這個證書其實就是公鑰,只是包含了很多信息,如證書的頒發機構,證書過期時間等等。
4. 客戶端解析證書
這部分工作是有客戶端的TLS來完成的,首先會驗證公鑰是否有效,比如頒發機構,過期時間等等,如果發現異常,則會彈出一個警告框,提示證書存在問題。如果證書沒有問題,那麼就生成一個隨機值。然後用證書對該隨機值進行加密。就好像上面說的,把隨機值用鎖頭鎖起來,這樣除非有鑰匙,不然看不到被鎖住的內容。
5. 傳送加密信息
這部分傳送的是用SSL證書加密後的隨機值,目的就是讓服務端得到這個隨機值,以後客戶端和服務端的通信就可以通過這個隨機值來進行加密解密了。
6. 服務段解密信息
服務端用私鑰解密後,得到了客戶端傳過來的隨機值(私鑰),然後把內容通過該值進行對稱加密。所謂對稱加密就是,將信息和私鑰通過某種演算法混合在一起,這樣除非知道私鑰,不然無法獲取內容,而正好客戶端和服務端都知道這個私鑰,所以只要加密演算法夠彪悍,私鑰夠復雜,數據就夠安全。
7. 傳輸加密後的信息
這部分信息是服務段用私鑰加密後的信息,可以在客戶端被還原。
8. 客戶端解密信息
客戶端用之前生成的私鑰解密服務段傳過來的信息,於是獲取了解密後的內容。整個過程第三方即使監聽到了數據,也束手無策。
⑥ 網路傳輸數據如何加密
MD5 和 RSA 是網路傳輸中最常用的兩個演算法;
1、MD5加密是不可逆的,通過MD5加密之後得到的加密字元串是不能再逆向解密的。
2、RSA加密是可逆的,通過RSA加密之後得到的加密字元串。可以利用加密的公鑰進行解密,需要注意的是公鑰最好不要在網路中傳輸。