国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

hashids插件庫解決序列id易泄露易推導的問題

lentrue / 2223人閱讀

摘要:自增序列類型數字主鍵,完全的自動增長,容易被判斷推導出其他的主鍵值。本方案就是使用解決易推導的問題,并且在數據量不大的情況下也不大。這些是彼此獨立生成的,碰撞風險非常小,可以忽略不計。是可以根據鹽值反向解碼的。增量輸入被破壞以保持不可思議。

ID管理方式的介紹

32位UUID轉Base64編碼,快速的id生成方案,問題在于編碼可讀性差,長度太長,查詢效率低。

自增序列類型數字主鍵,完全的自動增長,容易被判斷推導出其他的主鍵值。本方案就是使用hashids解決id易推導的問題,并且id在數據量不大的情況下也不大。

根據時間戳生成ID。如果你能承受一定程度的碰撞,你可以編寫一個動態建立的id。使用計數器(如果有的話)+時間戳(以毫秒為單位)+某個系統值(IP地址或某個機器ID)+隨機整數。許多大公司都采用這種方法,因為它在分布式系統中運行良好。這些ID是彼此獨立生成的,碰撞風險非常小,可以忽略不計。一般可能需要依賴redis等服務。

Hashids是一個小型開源庫,可以從數字中生成簡短,獨特,非順序的ID。

它將像347這樣的數字轉換為像“yr8”這樣的字符串,或者像[27,986]這樣的數字數組轉換為“3kTMd”。這在將多個參數捆綁到一個或簡單地將它們用作短UID時非常有用。
注意Hashids不是真正的加密算法,Hashids的工作方式與整數轉換為十六進制的方式類似,但有一些例外:
1.字母表不是base16,而是默認的base base62。
2.字母表也根據鹽進行洗牌。
?Hashids一種混淆數字的算法,與普通意義的hash(類似md5等的單向散列算法)不是一個意思。Hashids是可以根據鹽值反向解碼的。因為鹽值的存在,可以一定程度的防止破解。
特征
1.從數字(正數和零)創建短唯一ID。
2.允許自定義字母和鹽 - 所以ID只有你自己。
3.增量輸入被破壞以保持不可思議。
4.代碼很小(約350行),速度快,不依賴于外部庫。

代碼示例

Hashid庫可以支持各種語言,例如javascript或者java。以下以java為例。

import org.hashids.Hashids;
public class HashIds {
    public static void main(String[] args) {
        Hashids hashids = new Hashids("this is my salt");
        long a=12345678L;
        System.err.println("1待轉碼的數字:"+a);
        String hash = hashids.encode(a);
        System.err.println("1轉碼結果:"+hash);
        hashids = new Hashids("this is my salt");//用加密的鹽解密
        long[] numbers = hashids.decode(hash);
        System.err.println("1解碼結果:"+numbers[0]);//其可以加密數組,默認相當于數組
        
        
        long b1=100L;
        long b2=200L;
        Hashids hashids2 = new Hashids("this is my salt", 8);//8代表最低轉碼位數,防止位數太少
        System.out.println("2待轉碼的數字組合:"+b1+","+b2);
        String hash2 = hashids2.encode(b1,b2);
        System.out.println("2轉碼結果:"+hash2);
         hashids2= new Hashids("this is my salt", 8);
        long[] numbers2 = hashids2.decode(hash2);
        System.out.println("2解碼結果:"+numbers2[0]+","+numbers2[1]);
    }
}

如果是maven程序,可以在pom這樣引入


   org.hashids
   hashids
   1.0.3


文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/77851.html

相關文章

  • Android 2019最新面試實戰總結

    摘要:內存泄漏當應用內部不再需要某個實例后,但是這個對象卻仍然被引用,這個情況就叫做內存泄露。安卓虛擬機為每一個應用分配一定的內存空間,當內存泄露到達一定的程度就會造成內存溢出。點擊登錄跳轉頁面中所有操作都與用戶密切相關,是 Android: 今日頭條屏幕適配的原理? 1:首先計算出 density,計算公式:當前設備屏幕總寬度(單位為像素)/ 設計圖總寬度(單位為 dp) = densit...

    Caicloud 評論0 收藏0
  • 夯實基礎系列一:Java 基礎總結

    摘要:可實現單例模式代碼塊初始化靜態變量,只被執行一次內部類不能與外部類重名,只能訪問外部類靜態數據包括私有多分支選擇整型或字符類型變量或整數表達式開始支持。 前言 大學期間接觸 Java 的時間也不短了,不論學習還是實習,都讓我發覺基礎的重要性。互聯網發展太快了,各種框架各種技術更新迭代的速度非常快,可能你剛好掌握了一門技術的應用,它卻已經走在淘汰的邊緣了。 而學習新技術總要付出一定的時間...

    greatwhole 評論0 收藏0
  • Python中可迭代對象、迭代器和生成器

    摘要:本文重點掌握可迭代的對象的定義掌握可迭代對象迭代器與生成器之間的關系和異同熟悉標準庫中生成器。二迭代器迭代器介紹迭代器用于從集合中取出元素的對象。若想再次迭代須重建迭代器。迭代器檢查方式調用,。區別可迭代的對象不是迭代器。 導語:本文章記錄了本人在學習Python基礎之控制流程篇的重點知識及個人心得,打算入門Python的朋友們可以來一起學習并交流。 本文重點: 1、掌握可迭代的對象的...

    starsfun 評論0 收藏0
  • 編寫高效且優雅 Python 代碼(1)

    摘要:查看原函數的參數注釋甚至函數名的時候,只能看到裝飾器的相關信息。也就是說,它是裝飾器的裝飾器,并且以原函數為參數,作用是保留原函數的各種信息,使得我們之后查看被裝飾了的原函數的信息時,可以保持跟原函數一模一樣。 貌似只能創建一個專欄,所以這篇文章只好放到JavaScript從前端到全終端里了? 原文鏈接:Effective Python Python 作為一門入門極易并容易上癮的語...

    roadtogeek 評論0 收藏0

發表評論

0條評論

lentrue

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<