首頁>Club>
7
回覆列表
  • 1 # 使用者8130169142984

    1.Base64位加密(可加密解密)


    最簡單的加密方式,沒有金鑰,這種方式只要讓別人拿到你的密文,就可以直接解密,只能用來迷惑,一般情況下不單獨使用,因為真的並沒有什麼卵用~可以和其他加密方式混合起來,作為一層外部包裝。


    import base64

    data = “abc”

    #加密

    m = Base64.encodestring(data)

    print m #得到一個base64的值

    #解密

    date = Base64.decodestring(m)


    2.MD5加密(加密不可逆)

    MD5的全稱是Message-Digest Algorithm 5(資訊-摘要演算法)。128位長度。目前MD5是一種不可逆演算法。具有很高的安全性。它對應任何字串都可以加密成一段唯一的固定長度的程式碼。(小貼士:為啥MD5加密演算法不可逆呢~ 按道理來說有加密方式,就會有解密方式呀?因為MD5加密是有種有損的加密方式,比如一段資料為’123’,我在加密的時候,遇到1和3都直接當做是a,加密後變成了’a2a’,所以解密的時候就出現了4種組合’323’‘121’‘123’‘321’,資料一多,自然找不到原始的資料了,當然這種方式加密的密文也不需要解密,需要的時候直接傳送原始密文就好了~只是看不到密文原本的內容)


    import hashlib

    import base64

    data1 = “abc”

    data2 = ‘def’

    hash = hashlib.md5()

    #多個檔案多次加密

    hash.update(data1)

    hash.update(data2)

    value = hash.digest()

    print repr(value) #得到一個二進位制的字串

    print hash.hexdigest() #得到一個十六進位制的字串

    print base64.encodestring(value) #得到base64的值


    3.sha1加密(加密不可逆)

    SHA1的全稱是Secure Hash Algorithm(安全雜湊演算法) 。SHA1基於MD5,加密後的資料長度更長。它對長度小於264的輸入,產生長度為160bit的雜湊值。比MD5多32位。因此,比MD5更加安全,但SHA1的運算速度就比MD5要慢了。使用方法和MD5其實是一樣的~


    import hashlib

    #單個檔案一次加密

    value = hashlib.sha1(‘This is a sha1 test!’).hexdigest()

    print value #得到一個十六進位制的字串


    4.AES加密(需要金鑰才能解密)

    AES加密為對稱金鑰加密,加密和解密都是用同一個解密規則,AES加密過程是在一個4×4的位元組矩陣上運作,這個矩陣又稱為"狀態(state)",因為金鑰和加密塊要在矩陣上多次的迭代,置換,組合,所以對加密快和金鑰的位元組數都有一定的要求,AES金鑰長度的最少支援為128、192、256,加密塊分組長度128位。這種加密模式有一個最大弱點:甲方必須把加密規則告訴乙方,否則無法解密。儲存和傳遞金鑰,就成了最頭疼的問題。


    from Crypto.Cipher import AES

    #金鑰必須是16,24,32位的

    key = ‘1234567890123456’

    data = ‘abc’

    BS = 16

    #加密函式,如果text不足16位就補足為16位,

    pad = lambda s: s + (BS-len(s) % BS) * chr(BS - len(s) % BS)

    #加密

    cipher = AES.new(key)

    encrypted = cipher.encrypt(pad(m))

    #解密

    cipher = AES.new(key)

    encrypted = cipher.decrypt(pad(m))


    5.RSA加密(公鑰加密,私鑰解密)

    它是目前最重要的加密演算法!計算機通訊安全的基石,保證了加密資料不會被破解。你可以想象一下,信用卡交易被破解的後果。甲乙雙方通訊,乙方生成公鑰和私鑰,甲方獲取公鑰,並對資訊加密(公鑰是公開的,任何人都可以獲取),甲方用公鑰對資訊進行加密,此時加密後的資訊只有私鑰才可以破解,所以只要私鑰不洩漏,就能保證資訊的安全性。


    import rsa

    //先生成一對金鑰,然後儲存.pem格式檔案,當然也可以直接使用

    (pubkey, privkey) = rsa.newkeys(1024)

    pub = pubkey.save_pkcs1()

    pubfile = open(‘public.pem’,‘w+’)

    pubfile.write(pub)

    pubfile.close()

    pri = privkey.save_pkcs1()

    prifile = open(‘private.pem’,‘w+’)

    prifile.write(pri)

    prifile.close()


    //load公鑰和金鑰

    message = ‘hello’

    with open(‘public.pem’) as publickfile:

    p = publickfile.read()

    pubkey = rsa.PublicKey.load_pkcs1§

    with open(‘private.pem’) as privatefile:

    p = privatefile.read()

    privkey = rsa.PrivateKey.load_pkcs1§


    //用公鑰加密、再用私鑰解密

    crypto = rsa.encrypt(message, pubkey)

    message = rsa.decrypt(crypto, privkey)

    print message


    //sign 用私鑰簽名認真、再用公鑰驗證簽名

    signature = rsa.sign(message, privkey, ‘SHA-1’)

    rsa.verify(‘hello’, signature, pubkey)

  • 2 # 好人

    計算機在資訊儲存和傳遞過程中,出於對資訊保安的考慮會對儲存或傳遞的資訊(明文)進行加密處理防止資訊被第三方獲取以後讀取檢視,

    對加密的資訊(密文)進行處理使其變為可以讀取檢視的資訊(明文),這一過程叫做解密。

    舉例:我現在要向你傳送我的銀行卡密碼123(明文),我現在給密碼加密即給所有的數字乘以2,那麼我傳送給你的就是246(密文).你收到246(密文)以後給這一組數字除以2得到123(明文)的過程就叫做解密。

  • 中秋節和大豐收的關聯?
  • 紅綠燈4車道走法?