亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

短鏈接算法實(shí)現(xiàn)--加鹽hash

ssshooter / 2784人閱讀

摘要:如果僅僅只是通過(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

相關(guān)文章

  • 網(wǎng)址原理和實(shí)現(xiàn)

    摘要:背景介紹相信很多人手機(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...

    sihai 評(píng)論0 收藏0
  • 漫話密碼存儲(chǔ)

    摘要:通俗一點(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卡等) 你...

    Godtoy 評(píng)論0 收藏0
  • nodejs-md5加鹽到解密比對(duì)

    摘要:加密工具模塊提供了加密功能,包括對(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 是一種不可逆的加密算法,目前是最牢靠...

    MasonEast 評(píng)論0 收藏0
  • 鏈接原理分析

    摘要:舉個(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)鏈接上去。短鏈接主要用在諸如微博...

    SexySix 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<