A. 簡單講解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.提交隱私數據的安全過程 – 登錄
B. 如何給MD5加上salt隨機鹽值
MD5自身是不可逆的 但是目前網路上有很多資料庫支持反查詢
如果用戶密碼資料庫不小心被泄露黑客就可以通過反查詢方式獲得用戶密碼或者對於資料庫中出現頻率較高的hash碼(即很多人使用的)進行暴力破解(因為它通常都是弱口令)
鹽值就是在密碼hash過程中添加的額外的隨機值
比如我的id是癲ω倒④ゞ 密碼是 存在資料庫中的時候就可以對字元串/癲ω倒④ゞ 進行hash,而驗證密碼的時候也以字元串(要驗證的密碼)/癲ω倒④ゞ 進行驗證
這樣有另外一個笨蛋密碼是的時候 依然能構造出不同的hash值 並且能成功的驗證
這時候我的id就作為鹽值 為密碼進行復雜hash了
所以么。。鹽值的作用是減少資料庫泄露帶來的損失
如果你RP非常好 猜中了我的密碼是 我也阻止不了你啊
一般情況下,系統的用戶密碼都會經過一系列的加密才會存儲到資料庫或者別的資源文件。
鹽值加密:把你原來密碼,加上一些鹽然後再進行一些列的加密演算法。
比如你的密碼是: 用戶名是:gaobing
在security 中鹽值加密可以是這樣加鹽的{gaobing} 然後 ,在進行一些列的加密。
上一篇日誌中介紹了三種登陸設置,這邊用資料庫的那種作為例子:
<authentication-manager
<authentication-provider user-service-ref='myUserDetailsService'
<password-encoder hash=md5<salt-source user-property=username/</password-encoder
</authentication-provider
</authentication-manager
<b:bean id=myUserDetailsService
class=org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl
<b:property name=dataSource ref=dataS /
</b:bean說明:
<salt-source user-property=username/ 這一句即聲明了所加的鹽值,即資料庫中的username欄位。
<password-encoder hash=md5 在他的屬性中指明了加鹽之後的加密演算法 即MD5(應該是32位 我測試是32位的)
這樣設置後你的資料庫中的密碼也應該是經過鹽值加密的。
比如username:gaobing 在資料庫中的password應該是{gaobing}經過MD5加密後的 。
C. 如何改動md5加密演算法生成純數字密碼
生成結果字元串逐位元組 (C - 48) MOD 10 不就完了。
得到的是整型變數,需要字元型變數的話再+48
D. ASP.NET實現對輸入的密碼用MD5+鹽,並加密
public partial class _Default : System.Web.UI.Page
{
public bool IsMd5
{
get
{
//添加命名空間 using System.Configuration;
return ConfigurationManager.AppSettings["Md5"] == "1";
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (IsMd5)
{
//添加命名空間 using System.Web.Security;
string MD5 = FormsAuthentication.("被加密的欄位", "MD5"); // SHA1 MD5
}
}
}
---------------------web.config----------------------------------
<appSettings>
<!--加密, 1:代表是; 0:代表不是-->
<add key="Md5" value="1"/>
</appSettings>
E. iOS之MD5加密、加鹽
MD5加密:HASH演算法一種、 是生成32位的數字字母混合碼。
特點:
1、任意數據得出的MD5值長度都是32
2、對原數據進行任何改動,所得到的MD5值都有很大區別
應用:
主要運用在數字簽名、口令加密等方面
MD5改進(加鹽等):
現在的MD5已不再是絕對安全,對此,可以對MD5稍作改進,以增加解密的難度
加鹽(Salt):在明文的固定位置插入隨機串,然後再進行MD5
寫一個NSString分類,NSString+wxMD5
md5解密網站: https://www.cmd5.com
使用示例
F. Md5-Md5Crypt加鹽加密密碼操作
Md5 優點:快速計算m,具有單向性 one-way,不可由散列值推出原消息,但是如果密碼過於簡單就會有一定概率被暴力破解。
密碼存儲常用方式:
1、雙重MD5
2、MD5+加鹽
3、雙重MD5+加鹽
我一般使用2,只要資料庫沒有被攻破,密碼被暴力破解的概率是微乎其微的。
pom文件:
登錄的時候,再使用相同的方法驗證密碼是否一致
G. 在java中怎麼通過md5和salt來修改密碼
MD5很簡單,有專門的類,自己定義一個加密用的saltKey。
還有自己寫簡單的加密解密可以用異或演算法,一個字元串於某字元異或就加密了,再與這個字元異或又解密了。很簡單的演算法。不過比較容易破解