1.ACSII碼加密
//ACSII碼加密 private static string ACSIIPWd(string rpwd) { string Ret; byte[] array = System.Text.Encoding.ASCII.GetBytes(rpwd); byte[] byteArray = new byte[array.Length]; for (int i = 0; i < array.Length; i++) { int asciicode = (int)(array[i]); asciicode = asciicode + 1; byteArray[i] = (byte)asciicode; } System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding(); string strCharacter = asciiEncoding.GetString(byteArray); Ret = strCharacter; return Ret; }
2.MD5加密
//MD5加密 private static string MD5PWd(string rpwd) { string Ret; MD5 md5 = new MD5CryptoServiceProvider(); byte[] palindata = Encoding.Default.GetBytes(rpwd);//將要加密的字符串轉換為字節數組 byte[] encryptdata = md5.ComputeHash(palindata);//將字符串加密后也轉換為字符數組 Ret = Convert.ToBase64String(encryptdata); return Ret; }
3.RSA加密
//RSA加密 private static string RSAPWD1(string myKeyContainerName) { string ret = ""; CspParameters cp = new CspParameters(); cp.KeyContainerName = myKeyContainerName; RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cp); ret = rsa.ToXmlString(true); Console.WriteLine("Key is : \n" + rsa.ToXmlString(true)); return ret; }
rsa詳解: https://www.cnblogs.com/ButterflyEffect/p/9494061.html
4.DES加密
//DES加密 private static string DESPWD(string ciphertext) { string desPWD = ""; byte[] buffer; DESCryptoServiceProvider DesCSP = new DESCryptoServiceProvider(); MemoryStream ms = new MemoryStream();//先創建 一個內存流 CryptoStream cryStream = new CryptoStream(ms, DesCSP.CreateEncryptor(), CryptoStreamMode.Write);//將內存流連接到加密轉換流 StreamWriter sw = new StreamWriter(cryStream); sw.WriteLine(ciphertext);//將要加密的字符串寫入加密轉換流 sw.Close(); cryStream.Close(); buffer = ms.ToArray();//將加密后的流轉換為字節數組 desPWD = Convert.ToBase64String(buffer);//將加密后的字節數組轉換為字符串 return desPWD; }
5.base64
///編碼 public static string EncodeBase64(string code_type, string code) { string encode = ""; byte[] bytes = Encoding.GetEncoding(code_type).GetBytes(code); try { encode = Convert.ToBase64String(bytes); } catch { encode = code; } return encode; } ///解碼 public static string DecodeBase64(string code_type, string code) { string decode = ""; byte[] bytes = Convert.FromBase64String(code); try { decode = Encoding.GetEncoding(code_type).GetString(bytes); } catch { decode = code; } return decode; }
6.感知哈希法
第一步,縮小尺寸。
將圖片縮小到8x8的尺寸,總共64個像素。這一步的作用是去除圖片的細節,只保留結構、明暗等基本信息,摒棄不同尺寸、比例帶來的圖片差異。
第二步,簡化色彩。
將縮小后的圖片,轉為64級灰度。也就是說,所有像素點總共只有64種顏色。
第三步,計算平均值。
計算所有64個像素的灰度平均值。
第四步,比較像素的灰度。
將每個像素的灰度,與平均值進行比較。大於或等於平均值,記為1;小於平均值,記為0。
第五步,計算哈希值。
將上一步的比較結果,組合在一起,就構成了一個64位的整數,這就是這張圖片的指紋。組合的次序並不重要,只要保證所有圖片都采用同樣次序就行了。
=
= 8f373714acfcf4d0
得到指紋以后,就可以對比不同的圖片,看看64位中有多少位是不一樣的。在理論上,這等同於計算"漢明距離"(Hamming distance)。如果不相同的數據位不超過5,就說明兩張圖片很相似;如果大於10,就說明這是兩張不同的圖片。
具體的代碼實現,可以參見Wote用python語言寫的imgHash.py。代碼很短,只有53行。使用的時候,第一個參數是基准圖片,第二個參數是用來比較的其他圖片所在的目錄,返回結果是兩張圖片之間不相同的數據位數量(漢明距離)。
這種算法的優點是簡單快速,不受圖片大小縮放的影響,缺點是圖片的內容不能變更。如果在圖片上加幾個文字,它就認不出來了。所以,它的最佳用途是根據縮略圖,找出原圖。
實際應用中,往往采用更強大的pHash算法和SIFT算法,它們能夠識別圖片的變形。只要變形程度不超過25%,它們就能匹配原圖。這些算法雖然更復雜,但是原理與上面的簡便算法是一樣的,就是先將圖片轉化成Hash字符串,然后再進行比較。
原文:http://www.ruanyifeng.com/blog/2011/07/principle_of_similar_image_search.html
#!/usr/bin/python import glob import os import sys from PIL import Image EXTS = 'jpg', 'jpeg', 'JPG', 'JPEG', 'gif', 'GIF', 'png', 'PNG' def avhash(im): if not isinstance(im, Image.Image): im = Image.open(im) im = im.resize((8, 8), Image.ANTIALIAS).convert('L') avg = reduce(lambda x, y: x + y, im.getdata()) / 64. return reduce(lambda x, (y, z): x | (z << y), enumerate(map(lambda i: 0 if i < avg else 1, im.getdata())), 0) def hamming(h1, h2): h, d = 0, h1 ^ h2 while d: h += 1 d &= d - 1 return h if __name__ == '__main__': if len(sys.argv) <= 1 or len(sys.argv) > 3: print "Usage: %s image.jpg [dir]" % sys.argv[0] else: im, wd = sys.argv[1], '.' if len(sys.argv) < 3 else sys.argv[2] h = avhash(im) os.chdir(wd) images = [] for ext in EXTS: images.extend(glob.glob('*.%s' % ext)) seq = [] prog = int(len(images) > 50 and sys.stdout.isatty()) for f in images: seq.append((f, hamming(avhash(f), h))) if prog: perc = 100. * prog / len(images) x = int(2 * perc / 5) print '\rCalculating... [' + '#' * x + ' ' * (40 - x) + ']', print '%.2f%%' % perc, '(%d/%d)' % (prog, len(images)), sys.stdout.flush() prog += 1 if prog: print for f, ham in sorted(seq, key=lambda i: i[1]): print "%d\t%s" % (ham, f)