java">
importjava.security.MessageDigest;
publicclassMD5Tool{
publicstaticStringMD5(Stringstr){
MessageDigestmd5=null;
try{
md5=MessageDigest.getInstance("MD5");
}catch(Exceptione){
e.printStackTrace();
return"";
}
char[]charArray=str.toCharArray();
byte[]byteArray=newbyte[charArray.length];
for(inti=0;i<charArray.length;i++){
byteArray[i]=(byte)charArray[i];
}
byte[]md5Bytes=md5.digest(byteArray);
StringBufferhexValue=newStringBuffer();
for(inti=0;i<md5Bytes.length;i++)
{
intval=((int)md5Bytes[i])&0xff;
if(val<16)
{
hexValue.append("0");A
}
hexValue.append(Integer.toHexString(val));
}
returnhexValue.toString();
}
publicstaticStringencryptmd5(Stringstr){
char[]a=str.toCharArray();
for(inti=0;i<a.length;i++)
{
a[i]=(char)(a[i]^'l');
}
Strings=newString(a);
returns;
}
}
在要加密的地方,調用這個類的MD5方法就可以加密了,解密就調用這個類的encryptmd5方法,不過好像解密方法不完全正確,畢竟是解密,不可能對復雜字元加密後的解密完全正確。不過加密演算法是完全沒有問題的。
2. 介紹iOS中MD5加密演算法的使用
前言
軟體開發過程中,對數據進行加密是保證數據安全的重要手段,常見的加密有Base64加密和MD5加密。Base64加密是可逆的,MD5加密目前來說一般是不可逆的。
MD5生成的是固定的128bit,即128個0和1的二進制位,而在實際應用開發中,通常是以16進制輸出的,所以正好就是32位的16進制,說白了也就是32個16進制的數字。
MD5主要特點是 不可逆,相同數據的MD5值肯定一樣,不同數據的MD5值不一樣(也不是絕對的,但基本是不能一樣的)。
MD5演算法還具有以下性質:
1、壓縮性:任意長度的數據,算出的MD5值長度都是固定的。
2、容易計算:從原數據計算出MD5值很容易。
3、抗修改性:對原數據進行任何改動,哪怕只修改1個位元組,所得到的MD5值都有很大區別。
4、弱抗碰撞:已知含氏原數據和其MD5值,想找到一個具有相同MD5值的數據(即偽造數據)是非常困難的。
5、強抗碰撞:想緩顫找到兩個不同的數據,使它們具有相同的MD5值,是非常困難的。
6、MD5加密是不可解密的,但是網上有一些解析MD5的,那個相當於一個大型的資料庫,通過匹配MD5去找到原密碼。所以,只要在要加密的字元串前面加上一些字母數字元號或者多次MD5加密,這樣出來的結果一般是解析不出來的。
MD5的應用:
由於MD5加密演算法具有較好的安全性,而且免費,因此該加密演算法被廣泛使用
大多數的'登錄功能向後台提交密碼時都會使用到這種演算法
注意點:
(1)一定要和後台開發人員約定好,MD5加密的位數是16位還是32位(大多數都是32位的),16位的可以通過32位的轉換得到。
(2)MD5加密區分 大小寫,使用時要和後台約定好。
MD5解密:
解密網站:http://www.cmd5.com/
為了讓MD5碼更加安全 涌現了很多其他方法 如加鹽。 鹽要足夠長足夠亂 得到的MD5碼就很難查到。
終端代碼:$ echo -n abc|openssl md5 給字元串abc加密、
蘋果包裝了MD5加密的擾老敗方法,使用起來十分的方便。
#import@interface MD5Encrypt : NSObject// MD5加密/**由於MD5加密是不可逆的,多用來進行驗證*/// 32位小寫+(NSString *)MD5ForLower32Bate:(NSString *)str;// 32位大寫+(NSString *)MD5ForUpper32Bate:(NSString *)str;// 16為大寫+(NSString *)MD5ForUpper16Bate:(NSString *)str;// 16位小寫+(NSString *)MD5ForLower16Bate:(NSString *)str;@end
#import "MD5Encrypt.h"#import@implementation MD5Encrypt#pragma mark - 32位 小寫+(NSString *)MD5ForLower32Bate:(NSString *)str{ //要進行UTF8的轉碼 const char* input = [str UTF8String]; unsigned char result[CC_MD5_DIGEST_LENGTH]; CC_MD5(input, (CC_LONG)strlen(input), result); NSMutableString *digest = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2]; for (NSInteger i = 0; i < CC_MD5_DIGEST_LENGTH; i++) { [digest appendFormat:@"%02x", result[i]]; } return digest;}#pragma mark - 32位 大寫+(NSString *)MD5ForUpper32Bate:(NSString *)str{ //要進行UTF8的轉碼 const char* input = [str UTF8String]; unsigned char result[CC_MD5_DIGEST_LENGTH]; CC_MD5(input, (CC_LONG)strlen(input), result); NSMutableString *digest = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2]; for (NSInteger i = 0; i < CC_MD5_DIGEST_LENGTH; i++) { [digest appendFormat:@"%02X", result[i]]; } return digest;}#pragma mark - 16位 大寫+(NSString *)MD5ForUpper16Bate:(NSString *)str{ NSString *md5Str = [self MD5ForUpper32Bate:str]; NSString *string; for (int i=0; i<24; i++) { string=[md5Str substringWithRange:NSMakeRange(8, 16)]; } return string;}#pragma mark - 16位 小寫+(NSString *)MD5ForLower16Bate:(NSString *)str{ NSString *md5Str = [self MD5ForLower32Bate:str]; NSString *string; for (int i=0; i<24; i++) { string=[md5Str substringWithRange:NSMakeRange(8, 16)]; } return string;}@end
3. ios 怎麼使用md5進行加密
ios使用md5進行加密的方法:
1、定義頭文件:MyAdditions.h
@interface NSString (MyAdditions)
- (NSString *)md5;
@end
@interface NSData (MyAdditions)
- (NSString*)md5;
@end
2、實現主文件:MyAdditions.m
#import "MyAdditions.h"
#import <CommonCrypto/CommonDigest.h> // Need to import for CC_MD5 access
@implementation NSString (MyAdditions)
- (NSString *)md5
{
const char *cStr = [self UTF8String];
unsigned char result[CC_MD5_DIGEST_LENGTH];
CC_MD5( cStr, (int)strlen(cStr), result ); // This is the md5 call
return [NSString stringWithFormat:
@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
result[0], result[1], result[2], result[3],
result[4], result[5], result[6], result[7],
result[8], result[9], result[10], result[11],
result[12], result[13], result[14], result[15]
];
}
@end
@implementation NSData (MyAdditions)
- (NSString*)md5
{
unsigned char result[CC_MD5_DIGEST_LENGTH];
CC_MD5( self.bytes, (int)self.length, result ); // This is the md5 call
return [NSString stringWithFormat:
@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
result[0], result[1], result[2], result[3],
result[4], result[5], result[6], result[7],
result[8], result[9], result[10], result[11],
result[12], result[13], result[14], result[15]
];
}
@end
4. Android iOS Hash 演算法實現(MD5、SHA1、SHA256)
散列演算法是把任掘春意長度的輸入(又叫做預映射 pre-image )通過演算法變換成固定長度的卜散芹輸出。型畢散列是信息的提煉,通常其長度要比信息小得多,且為一個固定長度。
5. iOS 馬甲包 圖片md5值修改
一、批量修改md5值
ImageOptim Mac 下無損壓縮圖片工具,將包含圖片的文件夾孫罩拖入工具,會自動掃描文件夾下的所有文件,自動選擇最優演算法進行優化。一般第一次優化項目時,會有幾M到10幾M的優化效果。
ImageMagick ImageMagick: 是一款創建、編輯、合成,轉換圖像的命令行工具。 通過 brew 安裝 imagemagick
brew install imagemagick
壓縮文件夾下所有 png 文件,會修改 md5 值 ,進則培鬧入存放圖片的文件夾,運行命令即可
cd 文件路徑find . -iname "*.png" -exec echo {} \; -exec convert {} {} \;
二、單個修改md5值(mp4等類型)
(1)查看 md5 值
打開 Terminal (終端),輸入「md5」,空格,文件路徑,最終命令類似於:
//方式一md5 文件路徑//方式二cd 文件路徑md5 xxx.mp4//方式三md5-q 文中族件路徑
(2)修改 md5 值
修改文件的md5值命令,輸入echo 任意字元 >> 文件路徑,最終命令類似於:
echo xxx >> 文件路徑
6. Android 的幾種加密方式
Android 中的最常用得到有三種加密方式:MD5,AES,RSA.
1.MD5
MD5本質是一種散列函數,用以提供消息的完整性保護。
特點:
1.壓縮性:任意長度的數據,算出的MD5值長度都是固定的;
2.容易計算:從原數據計算出MD5值很容易;
3.抗修改性:對原數據進行任何改動,哪怕只修改一個位元組,所得到的MD5值都有很大的區別
4.強抗碰撞:已知原數據和其MD5值,想找到一個具有相同MD5值的數據(及偽造數據)是非常困難的;
2.RSA加密
RSA加密演算法是一種非對稱加密演算法,非對稱加密演算法需要兩個密鑰:公共密鑰和私有密鑰。公鑰和私鑰是配對的,用公鑰加密的數據只有配對的私鑰才能解密。
RSA對加密數據的長度有限制,一般為密鑰的長度值-11,要加密較長的數據,可以採用數據截取的方法,分段加密。
3.AES加密
AES加密是一種高級加密的標准,是一種區塊加密標准。它是一個對稱密碼,就是說加密和解密用相同的密鑰。WPA/WPA2經常用的加密方式就是AES加密演算法。
7. APP新增用戶是怎麼計算出來的
一般來說,新增用戶是指首次聯網使用應用的用戶,以設備號(DeviceID)作為判斷標准。
舉例(一般情況下):
用戶A在該設備D上第1次打開app時,會被記作為1個新增用戶;
該用戶A在設備D上卸載應用後重新安裝該應用,不會被記1個新增用戶;
該用戶A在設備D上通過其他賬號登錄,不會被記作1個新增用戶;
該用戶緩搜A在其他新設備E上第1次打開APP時,會被計作為1個新增用戶。
新增用戶指標的統計方法,可以簡單地理解為,每次獲取到1個新的DeviceID,新增用戶數+1;在不同平台上,其統計SDK獲得DeviceID的處理方法有所不同:
一、Android平台
統計SDK可直接讀取到Android設備的IMEI號,用該IMEI號,即可生成DeviceID。
DeviceID可叢歷以通過以下公式獲取:DeviceID=x1+MD5(android_imei_mac)
二、IOS平台
1、UDID
UDID(設備唯一標識符,Unique Device Identifier),UDID,之前一直是設備唯一標識的神器,各大應用和統計SDK均通過獲取UDID標識設備。不過,2013年5月1日後,讀取UDID的應用,將被拒絕上架,相當於把這條路封死了。
2、MAC地址
IOS7.0以前的設備,可讀取MAC地址,通過該MAC地址,即可生成DeviceID。
DeviceID可以通過以下公式獲取:DeviceID=x2+MD5(ios_mac)
IOS7.0及以後的設備,MAC地址返回的是一個固定值,因此對於iOS7.0及以後的設備,將無法通過MAC地滲哪搜址來標識設備的唯一性。
3、openUDID
openUDID,是通過第一個帶有OpenUDID SDK包的App生成的,在下列2種情況下,openUDID會重新生成:
(1)、用戶卸載了全部帶有OpenUDID SDK包的App後,並重新啟動設備後,openUDID將會重新生成;
(2)、用戶更新了ios系統,或者選擇了恢復出廠設置是,openUDID將會重新生成;
考慮到90%以上的用戶在IOS系統更新後,均會重新生成openUDID,採用openUDID方法標識用戶唯一性也慢慢被棄用。
4、IDFA&IDFV
(1)、IDFA(廣告標識符,Advertising Identifier),是蘋果公司提供的用於追蹤用戶的廣告ID,同一手機的不同APP對應著相同的IDFA,IDFA可通過以下步驟重置:設置-隱私-廣告-還原廣告標識符。
如DeviceID可以通過以下公式獲取:DeviceID=x2+MD5(IDFA)。
因為IDFA會存在取不到的情況,因此需要選用其他的ID作為DeviceID;在取不到IDFA的情況下,我們選用IDFV;
(2)、IDFV(Vindor標示符,IdentifierForVendor),一般用於追蹤用戶在應用內的行為,每個設備在所屬同一個Vender的應用里值是相同的;如果用戶刪掉了該vender的所有APP,IDFV將會被重置。
DeviceID可以通過以下公式獲取:DeviceID=x2+MD5(IDFV)。
5、UUID
UUID(通用唯一標識碼,Universally Unique Identifier),通用唯一識別碼,每次生成均不一樣;第1次生成後UUID後,需要保存到鑰匙串(keyChain)中;應用被刪除再重裝時,仍然可以從鑰匙串得取到UUID;在一台設備上,同一個開發者賬號的所有APP,可獲取到相同的UDID;刷機或者重新安裝系統後,UUID將重新生成。
DeviceID可以通過以下公式獲取:DeviceID=x2+MD5(UUID)。
綜上可知,IOS的DeviceID的獲取方法可以概括為:
IOS7.0以前的設備,DeviceID=x2+MD5(ios_mac)
IOS7.0及以後的設備,DeviceID=x2+MD5(IDFA/IDFV/UUID),即先去IDFA的值,取不到IDFA時去取IDFV的值,再取不到時IDFA時,則生成UUID;
補充說明:這里x1和x2,是為了區分不同類型DeviceID,自定義的前綴。
如:
x1abcd123……
x2abcd123……
通過查看前綴,即可知道這些設備號是Android的還是iOS的。
8. ios md5加密原理是什麼意思
MD5加密演算法原理MD5的全稱是Message-Digest Algorithm 5(信息-摘要演算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L. Rivest開發出來,經MD2、MD3和MD4發展而來。它的作用是讓大容量信息在用數字簽名軟體簽署私人密匙前被"壓縮"成一種保密的格式(就是把一個任意長度的位元組串變換成一定長的大整數)。不管是MD2、MD4還是MD5,它們都需要獲得一個隨機長度的信息並產生一個128位的信息摘要。雖然這些演算法的結構或多或少有些相似,但MD2的設計與MD4和MD5完全不同,那是因為MD2是為8位機器做過設計優化的,而MD4和MD5卻是面向32位的電腦。這三個演算法的描述和C語言源代碼在Internet RFCs 1321中有詳細的描述( http://www.ietf.org/rfc/rfc1321.txt),這是一份最權威的文檔,由Ronald L. Rivest在1992年8月向IEFT提交。. .
9. 簡單講解iOS應用開發中的MD5加密的使用
一、簡單說明
1.說明
在開發應用的時候,數據的安全性至關重要,而僅僅用POST請求提交用戶的隱私數據,還是不能完全解決安全問題。
如:可以利用軟體(比如Charles)設置代理伺服器,攔截查看手機的請求數據
「青花瓷」軟體
因此:提交用戶的隱私數據時,一定不要明文提交,要加密處理後再提交
2.常見的加密演算法
MD5 SHA DES 3DES RC2和RC4 RSA IDEA DSA AES
3.加密演算法的選擇
一般公司都會有一套自己的加密方案,按照公司介面文檔的規定去加密
二、MD5
1.簡單說明
MD5:全稱是Message Digest Algorithm 5,譯為「消息摘要演算法第5版」
效果:對輸入信息沒檔察生成唯一的.128位散列值(32個字元)
2.MD5的特枯茄點
(1)輸入兩個不同的明文不會得到相同的輸出值
(2)根據輸出值,不能得到原始的明文,即其過程不可逆
3.MD5的應用
由於MD5加密演算法具有較好的安全性,而且免費,因此該加密演算法被廣泛使用
主要運用在數字簽名、文件完整性驗證以及口令加密等方面
4.MD5破解
MD5解密網站:http://www.cmd5.com
5.MD5改進
現在的MD5已不再是絕對安全,對此,可以對MD5稍作改進,以增加解密的難度
加鹽(Salt):在明文的固定位置插入隨機串,然後再進行MD5
先加密,後亂序:先對明文進行MD5,然後對加密得到的MD5串的字元進行亂序
總之宗旨就是:黑客就算攻破了資料庫,也無法解密出正確的明文
代碼示例:
復制代碼 代碼如下:
#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 ----
// 登錄: 123 ---
NSString *header = [anwen substringToIndex:2];
NSString *footer = [anwen substringFromIndex:2];
anwen = [footer stringByAppendingString:header];
NSLog(@"%@ - %@", str, anwen);
return anwen;
}
@end
(1)直接使用MD5加密(去MD5解密網站即可破解)
(2)使用加鹽(通過MD5解密之後,很容易發現規律)
(3)多次MD5加密(使用MD5解密之後,發現還是密文,那就接著MD5解密)
(4)先加密,後亂序(破解難度增加)
三、注冊和驗證的數據處理過程
1.提交隱私數據的安全過程 – 注冊
2.提交隱私數據的安全過程 – 登錄
10. SMSSDK android發驗證碼返回錯誤碼489MD5錯誤
集成SMSSDK從3.3.0版本開始必須要在mob後台配置MD5簽名(md5是指Android端apk簽名文件(keystore)中的md5值)以下是MD5的使用規則:
1.md5碼限制只針對Android3.3.0以上的版本,Android3.3.0以前的版本或者iOS任何版本,在後台添加md5是不起作用的
2.md5簽名中不含「:」
3.md5目前不區分大小寫, 必須和自己的包里的md5一致
4.未審核或審核未通過,不影響20條測試
5.原先通過審核的包(同一個包名)升級sdk的話,目前沒有測試額度,必須填寫MD5並且審核通過才能使用
6.Android和iOS相同包名,只上傳了ios的話,就在ios包下設置MD5簽名並且審核通過才不影響Android包
7.同一個包名下最多可提交5個md5,只要請求的包中的md5與後台配置的任何一個md5匹配就行
8.如果是gradle集成的用戶,只有在重新打包的時候才會更新,不會影響線上版本 如果還有不清楚的地方 可以登陸MobTech官網咨詢