摘要:如果僅僅只是通過(guò)直接加密,不安全。所以為了加入靜態(tài)鹽和動(dòng)態(tài)鹽加密的長(zhǎng)度我設(shè)置的位加密的取三位。用來(lái)加強(qiáng)短鏈接檢查這里輸出查看下把。存到數(shù)據(jù)庫(kù)和上面的檢查鹽一樣靜態(tài)鹽檢查檢查完畢。拿到原始但是這個(gè)算法還是有可能會(huì)有沖突。
如果僅僅只是通過(guò)MD5直接加密,不安全。彩虹表很容易破解。所以為了加入靜態(tài)鹽和動(dòng)態(tài)鹽
public String encreptUrl(String url){ try { byte[] salt = "JKDSPnBKYJ2E7kEg9mYSteK4AXE8ywUB96y8gjDFhfy".getBytes("UTF-8"); String checkSalt = "C2NkXy3ECJn9AcMB976DnBKYJ2E7kEg9mYSte"; MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); messageDigest.reset(); messageDigest.update(salt); byte[] bytes = url.getBytes("UTF-8"); byte[] encryptUrl = messageDigest.digest(bytes); Base64 base64 = new Base64(true); String semiFinishedProducts = new String(base64.encode(encryptUrl)); //加密url的長(zhǎng)度我設(shè)置的6位. 加密的url取三位。剩下三位分別給靜態(tài)鹽1位和動(dòng)態(tài)鹽2位 String urlKey = semiFinishedProducts.substring(0,3); //位置可以在0-32位之間。這里可以選擇位置。但是解密的時(shí)候就必須用同樣的位置 String staticSalt = md5Util(urlKey+checkSalt).substring(4,5); String dynaSalt = md5Util(""+UUID.randomUUID()).substring(5,7); String encrypted = urlKey+staticSalt+dynaSalt; //標(biāo)記量。用來(lái)加強(qiáng)短鏈接檢查.這里輸出查看下 String sig = md5Util(encrypted); String domain = "www.baidu.com/"; String subDomain = "demo/"; String encryptedUrl = domain+subDomain+encrypted; //把 sig ,encryptedUrl ,originalUrl,key。存到數(shù)據(jù)庫(kù) return encryptedUrl; } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return null; } public String getOriginUrl(String encrpetUrl,String sig){ encrpetUrl = encrpetUrl.substring(encrpetUrl.lastIndexOf("/")+1); String key = encrpetUrl.substring(0,3); String staticSalt = encrpetUrl.substring(3,4); //和上面的檢查鹽一樣 String checkSalt = "C2NkXy3ECJn9AcMB976DnBKYJ2E7kEg9mYSte"; //靜態(tài)鹽檢查 String correctStaticSalt = md5Util(key+checkSalt).substring(4,5); if (!staticSalt.equals(correctStaticSalt)){ return "error"; } String correctSig = md5Util(encrpetUrl); if (!sig.equals(correctSig)){ return "error"; } //檢查完畢。 沒(méi)問(wèn)題就通過(guò)key查詢數(shù)據(jù)庫(kù)。拿到原始url return "true"; } public String md5Util(String semiFinishedProducts){ MessageDigest lDigest = null; try { lDigest = MessageDigest.getInstance("MD5"); lDigest.update(semiFinishedProducts.getBytes()); BigInteger lHashInt = new BigInteger(1, lDigest.digest()); return String.format("%1$032X", lHashInt); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return null; }
但是這個(gè)算法還是有可能會(huì)有hash沖突。而且位數(shù)越短越可能發(fā)生。最好設(shè)置6位以上
解決方法:覆蓋數(shù)據(jù)庫(kù)方法或者重新計(jì)算
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/77380.html
摘要:背景介紹相信很多人手機(jī)上都收到過(guò)一些營(yíng)銷短信,短信里面有時(shí)候會(huì)附帶一些網(wǎng)址,如下圖這些網(wǎng)址往往都是非常短,但是當(dāng)我們打開之后,如果你仔細(xì)觀察,中間會(huì)有跳轉(zhuǎn),最終瀏覽器地址欄顯示的網(wǎng)址并不是你短信里面看到的網(wǎng)址,這就是短網(wǎng)址原理和應(yīng)用短網(wǎng)1.背景介紹 相信很多人手機(jī)上都收到過(guò)一些營(yíng)銷短信,短信里面有時(shí)候會(huì)附帶一些網(wǎng)址,如下圖 showImg(https://user-gold-cdn.xitu...
摘要:通俗一點(diǎn)說(shuō)就是彩虹表犧牲了一點(diǎn)計(jì)算速度,換來(lái)的好處是較少的空間存儲(chǔ)更多的密碼數(shù)據(jù)。關(guān)于鹽的使用有一點(diǎn)需要說(shuō)明加鹽的目的是為了增加提前構(gòu)造字典和彩虹表的代價(jià),并不是為了加密或增加密碼的計(jì)算復(fù)雜性。 背景 密碼是用來(lái)進(jìn)行鑒權(quán)(身份認(rèn)證)一種手段,說(shuō)白了就是證明你是誰(shuí)。一般鑒權(quán)都可以總結(jié)為下面3種形式: 你知道什么? (如密碼,密碼提示問(wèn)題等) 你有什么? (如信用卡,token卡等) 你...
摘要:加密工具模塊提供了加密功能,包括對(duì)的哈希加密解密簽名以及驗(yàn)證功能的一整套封裝。當(dāng)然也是優(yōu)缺點(diǎn)的加密相同的字符是結(jié)果都是相同的碼,會(huì)出現(xiàn)撞庫(kù)的風(fēng)險(xiǎn)。 nodejs-crypto 加密工具 crypto 模塊提供了加密功能,包括對(duì) OpenSSL 的哈希、MD5、HMAC、加密、解密、簽名、以及驗(yàn)證功能的一整套封裝。 crypto 常用的MD5 MD5 是一種不可逆的加密算法,目前是最牢靠...
摘要:舉個(gè)例子,第一個(gè)進(jìn)來(lái)的鏈接發(fā)號(hào)器發(fā)號(hào),對(duì)應(yīng)的短鏈接為,第二個(gè)進(jìn)來(lái)的鏈接發(fā)號(hào)器發(fā)號(hào),對(duì)應(yīng)的短鏈接為,以此類推。這樣一來(lái)會(huì)導(dǎo)致一條長(zhǎng)鏈接對(duì)應(yīng)多條短鏈接的情況出現(xiàn),不僅浪費(fèi)存儲(chǔ)空間,又浪費(fèi)發(fā)號(hào)器資源。 1. 什么是短鏈接 顧名思義,短鏈接即是長(zhǎng)度較短的網(wǎng)址。通過(guò)短鏈接技術(shù),我們可以將長(zhǎng)度較長(zhǎng)的鏈接壓縮成較短的鏈接。并通過(guò)跳轉(zhuǎn)的方式,將用戶請(qǐng)求由短鏈接重定向到長(zhǎng)鏈接上去。短鏈接主要用在諸如微博...
閱讀 1911·2021-08-19 11:12
閱讀 1479·2021-07-25 21:37
閱讀 1036·2019-08-30 14:07
閱讀 1333·2019-08-30 13:12
閱讀 716·2019-08-30 11:00
閱讀 3592·2019-08-29 16:28
閱讀 1056·2019-08-29 15:33
閱讀 3022·2019-08-26 13:40