當前位置:首頁 » 密碼管理 » ios參數加密

ios參數加密

發布時間: 2022-07-15 14:09:05

㈠ iOS代碼加密的幾種方式

眾所周知的是大部分iOS代碼一般不會做加密加固,因為iOS
APP一般是通過AppStore發布的,而且蘋果的系統難以攻破,所以在iOS里做代碼加固一般是一件出力不討好的事情。萬事皆有例外,不管iOS、adr還是js,加密的目的是為了代碼的安全性,雖然現在開源暢行,但是不管個人開發者還是大廠皆有保護代碼安全的需求,所以iOS代碼加固有了生存的土壤。下面簡單介紹下iOS代碼加密的幾種方式。

iOS代碼加密的幾種方式

1.字元串加密

字元串會暴露APP的很多關鍵信息,攻擊者可以根據從界面獲取的字元串,快速找到相關邏輯的處理函數,從而進行分析破解。加密字元串可以增加攻擊者閱讀代碼的難度以及根據字元串靜態搜索的難度。

一般的處理方式是對需要加密的字元串加密,並保存加密後的數據,再在使用字元串的地方插入解密演算法。簡單的加密演算法可以把NSString轉為byte或者NSData的方式,還可以把字元串放到後端來返回,盡量少的暴露頁面信息。下面舉個簡單例子,把NSString轉為16進制的字元串:

2.符號混淆

符號混淆的中心思想是將類名、方法名、變數名替換為無意義符號,提高應用安全性;防止敏感符號被class-mp工具提取,防止IDA Pro等工具反編譯後分析業務代碼。目前市面上的IOS應用基本上是沒有使用類名方法名混淆的。

  • 別名

  • 在編寫代碼的時候直接用別名可能是最簡單的一種方式,也是比較管用的一種方式。因為你的app被破解後,假如很容易就能從你的類名中尋找到蛛絲馬跡,那離hook只是一步之遙,之前微信搶紅包的插件應該就是用hook的方式執行的。

    b.C重寫

    編寫別名的方式不是很易讀,而且也不利於後續維護,這時你可能需要升級一下你的保護方式,用C來重寫你的代碼吧。這樣把函數名隱藏在結構體中,用函數指針成員的形式存儲,編譯後,只留下了地址,去掉了名字和參數表,讓他們無從下手( from 念茜)。如下例子:

    c.腳本處理

    稍微高級一點的是腳本掃描處理替換代碼,因為要用到linux命令來編寫腳本,可能會有一點門檻,不過學了之後你就可以出去吹噓你全棧工程師的名頭啦。。。

    linux腳本比較常用的幾個命令如下:

    腳本混淆替換是用上述幾個命令掃描出來需要替換的字元串,比如方法名,類名,變數名,並做替換,如果你能熟練應用上述幾個命令,恭喜你,已經了解了腳本的一點皮毛了。

    如以下腳本搜索遍歷了代碼目錄下的需要混淆的關鍵字:

    替換的方式可以直接掃描文件並對文件中的所有內容替換,也可以採用define的方式定義別名。例如:

    d.開源項目ios-class-guard

    該項目是基於class-mp的擴展,和腳本處理類似,是用class-mp掃描出編譯後的類名、方法名、屬性名等並做替換,只是不支持隱式C方法的替換,有興趣的同學可以使用下。

    3.代碼邏輯混淆

    代碼邏輯混淆有以下幾個方面的含義:

    對方法體進行混淆,保證源碼被逆向後該部分的代碼有很大的迷惑性,因為有一些垃圾代碼的存在;

    對應用程序邏輯結構進行打亂混排,保證源碼可讀性降到最低,這很容易把破解者帶到溝里去;

    它擁有和原始的代碼一樣的功能,這是最最關鍵的。

    一般使用obfuscator-llvm來做代碼邏輯混淆,或許會對該開源工具做個簡單介紹。

    4.加固SDK

    adr中一般比較常見的加固等操作,iOS也有一些第三方提供這樣的服務,但是沒有真正使用過,不知道效果如何。

    當然還有一些第三方服務的加固產品,基本上都是採用了以上一種或幾種混淆方式做的封裝,如果想要直接可以拿來使用的服務,可以採用下,常用的一些服務如下:

    幾維安全

    iOS加密可能市場很小,但是存在必有道理,在越獄/開源/極客的眼中,你的APP並沒有你想像的那麼安全,如果希望你的代碼更加安全,就應給iOS代碼加密。

㈡ 蘋果手機應用加密怎麼設置

1/7
點擊手機屏幕上的【設置】

2/7
下拉點擊頁面上的【通用】

3/7
點擊【訪問限制】

4/7
點擊【啟用訪問限制】

5/7
然後輸入訪問限制的密碼

6/7
進入訪問限制頁面後,把想要加密的應用右邊的允許開關關閉就可以了

7/7
點擊打開手機上的設置點擊通用點擊訪問限制點擊啟用訪問限制輸入訪問限制密碼點擊想要加密的應用右邊的允許開關關閉。

㈢ ios加密機制是什麼為什麼無法破解

用過蘋果產品的年輕朋友們都知道,不管是手機,還是電腦,都會有著相應的iOS加密機制。這種加密機制能夠很好的保護大家的隱私,而且也非常的安全。其實根據小編了解到的消息可以得知,這種加密機制就是利用整個存儲晶元進行加密,然後再通過鎖屏密碼以及其他的一些東西,因此生成一個偽隨機數。之所以無法破解,是因為晶元牢固封裝在主板上。

因為小編自己就是蘋果手機,如果輸入鎖屏密碼錯誤達到了一定的次數之後,手機就會啟動iOS加密機制,把所有的輸入擦除掉。而且蘋果全屏加密的密鑰是儲存在一個非常特殊的空間裡面,其他人是無法發現的,即使被遠程擦除掉,但是永遠都拿不到鑰匙。如果自己需要保密的東西比較多,或者想要隱藏的東西比較多,小編還是建議大家購買蘋果產品的,雖然價格有些貴,但是使用起來真的非常好。

㈣ 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;
}

㈤ 蘋果手機如何設置應用加密

很多用戶在使用智能手機的過程中都會在手機應用中儲存一些隱私信息,然後給這些應用加密,這樣就不用擔心自己的隱私會被別人偷看到了。應用加密這個操作在安卓系統的手機中設置起來非常的簡單,用戶比較容易上手,但是在蘋果手機的iOS系統中,很多用戶都不知道有應用加密這個功能,更不要說自己來設置了,介於還有很多用戶不知道要如何設置,小編今天就來跟大家分享一下具體的方法步驟,有需要的朋友趕緊一起來看一看吧,希望能夠幫助到大家。
方法步驟
1.在蘋果手機中給應用程序加密的話我們是可以通過手機內的APP或者系統程序來設置的,可以使用到手機中的一些系統程序進行加密。
2.首先第一步進入手機之後我們需要在界面中找到設置圖標,點擊進入到設置中之後,在設置界面找到通用這個選項,然後點擊進去。
3.點擊到通用界面之後,我們在界面列表中找到訪問限制這個選項,然後點擊到訪問限制界面中,這時需要輸入訪問限制的密碼。
4.密碼輸入完成之後我們就可以開始為應用「上鎖」了,在界面的下方會出現手機上的所有應用,然後我們將想要加密的應用程序後面的開關開啟就可以了。

㈥ ios應用開發過程中如何加密、防內購破解等,簡單加密方法

在大多數iOS應用在開發者看來,封閉的iOS系統很安全,iOS應用也很安全,但事實上,iOS應用沒有我們想像中的安全。如同安卓應用,iOS應用也面臨著被破解的威脅,存在大量盜版情況,所以開發者對此一定要重視起來,應用在上市場之前還是要多做些相關的防護,例如:
1.本地數據加密
對NSUserDefaults,sqlite存儲文件數據加密,保護帳號和關鍵信息。
2. URL編碼加密
對程序中出現的URL進行編碼加密,防止URL被靜態分析
3. 網路傳輸數據加密
對客戶端傳輸數據提供加密方案,有效防止通過網路介面的攔截獲取
4. 方法體,方法名高級混淆
對應用程序的方法名和方法體進行混淆,保證源碼被逆向後無法解析代碼
5. 程序結構混排加密
對應用程序邏輯結構進行打亂混排,保證源碼可讀性降到最低

㈦ ios 怎麼對字元串進行aes加密

AES是塊加密,每次都是對固定長度的數據進行加密,不夠的就需要補了,太長的話,就需要搞成兩次運算。所以你需要看看是不是需要分成兩次加密運算。

㈧ iOS開發中哪些地方需要加密啊

涉及加密都是些敏感信息,這個很大程度取決於業務上的需求,比如用戶身份證,手機號碼、護照等信息。不涉及業務的,其實也有一些,常用的就是網路請求參數加密,配合介面返回解密,本地資料庫加密,文件加密。要做手勢密碼等交互,也需要加密,還可以做下代碼的混淆,程序進入後台時界面處理。

㈨ 怎麼在ios進行rsa公鑰加密,java做rsa私鑰解密

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); keyGen.initialize(1024); KeyPair key = keyGen.generateKeyPair(); Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); //把第二個參數改為 key.getPrivate() cipher.init(Cipher.ENCRYPT_MODE, key.getPublic()); byte[] cipherText = cipher.doFinal("Message".getBytes("UTF8")); System.out.println(new String(cipherText, "UTF8")); //把第二個參數改為key.getPublic() cipher.init(Cipher.DECRYPT_MODE, key.getPrivate()); byte[] newPlainText = cipher.doFinal(cipherText); System.out.println(new String(newPlainText, "UTF8")); 正常的用公鑰加密私鑰解密就是這個過程,如果按私鑰加密公鑰解密,只要按備注改2個參數就可以。 但是我要提醒樓主,你要公鑰解密,公鑰是公開的,相當於任何人都查到公鑰可以解密。 你是想做簽名是吧。

熱點內容
密碼忘了從哪裡找 發布:2025-05-14 02:39:09 瀏覽:546
我的世界什麼伺服器有前途 發布:2025-05-14 02:30:31 瀏覽:527
java程序反編譯 發布:2025-05-14 02:18:46 瀏覽:457
蛤蟆編程 發布:2025-05-14 02:17:12 瀏覽:642
解壓縮文件後綴 發布:2025-05-14 02:14:07 瀏覽:303
閱章娛樂系統清理數據密碼是多少 發布:2025-05-14 02:09:10 瀏覽:972
米家的密碼鎖初始密碼是多少 發布:2025-05-14 01:58:51 瀏覽:36
存儲空間和內存的區別 發布:2025-05-14 01:57:20 瀏覽:951
市裡煤炭資源配置是什麼意思 發布:2025-05-14 01:52:23 瀏覽:307
c刪除一行資料庫 發布:2025-05-14 01:50:53 瀏覽:74