我的密碼演算法v1.0

羅音發表於2014-06-01

起因是 csdn密碼洩露事件。那天晚上我徹夜未眠...把所有網站密碼改了一通,不管是用了沒用那個密碼的都改...

然後就發現了一個噩夢...如果每個網站的密碼都不一樣,那記起來豈不是噩夢。於是把幾個主要的網站密碼改的不一樣,其他網站都一樣...另外把用到的安全郵箱都指向了很早之前註冊的但經常不用的另外一個郵箱..

這個密碼v1.0版本是2012年8月份形成的,之前主要用在蘑菇街/美麗說/返還網等密碼中.說起來好簡單..

ps:目前密碼進化到v3版...萬變不離其宗,變化的主要目的是不讓那麼隨便猜出basepassword


var md5passwd = md5('[basepassword]'); var salt = md5password[1..n] #n = [1,3,5,7,9,13,17,19,23,29,31] var passwd = md5(salt+ '[email]' +'[domain]')[0..8]

example:

package main

import (
    "crypto/md5"
    "fmt"
    "io"
)

func main() {

    var salt []byte

    domain := "www.mogujie.com"
    email := "123@mogujie.com"
    basepasswd := "123456"

    prim := []uint32{1, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31}

    h := md5.New()
    io.WriteString(h, basepasswd)
    md5basepasswd := fmt.Sprintf("%x", h.Sum(nil))
    for _, v := range prim {
        salt = append(salt, md5basepasswd[v])
    }

    hh := md5.New()
    io.WriteString(h, string(salt))
    io.WriteString(h, email)
    io.WriteString(h, domain)
    md5str := fmt.Sprintf("%x", hh.Sum(nil))
    fmt.Println(md5str[0:9])
    // output:d41d8cd98
}

為什麼使用md5因為md5出來的值剛好32位,第32位在程式語言中是31..是一個質數
也就是說md5出來的值最有一位參與了後面的計算過程

相關文章