MD5加密文件、字符串、數據


  • 概念解釋:Message Digest(摘要) Algorithm (算法) : 信息摘要算法第五版

  • 就是把任意長度的字節串編程一個一定長的十六進制數字串

  • 特點

    1、壓縮性:任意長度的數據,算出的MD5值長度都是固定的。

    2、容易計算:從原數據計算出MD5值很容易。

    3、抗修改性:對原數據進行任何改動,哪怕只修改1個字節,所得到的MD5值都有很大區別。

    4、強抗碰撞:已知原數據和其MD5值,想找到一個具有相同MD5值的數據(即偽造數據)是非常困難的。

  • 算法的輸出由四個32位分組組成,將這四個32位分組級聯后將生成一個128位散列值,最終返回一個128位的1或者0

  • 這個算法是不可逆的。

  • 這個算法可以幫你查看文件是否被修改

  • swift
    struct MD5Utility {
        static func getMD5FromString(string: String) -> NSMutableString {
            let original = string.cStringUsingEncoding(NSUTF8StringEncoding)
            let digest = UnsafeMutablePointer<UInt8>.alloc(16)
            let length = UInt32(strlen(original!))
            CC_MD5(original!, length, digest)
    
            return getMD5Str(digest)
        }
        
        static func getMD5FromData(data: NSData) ->NSMutableString {
            let original = data.bytes
            let ori = unsafeBitCast(original, UnsafePointer<Int8>.self)
            
            let MD5Length = Int(CC_MD5_DIGEST_LENGTH)
            let digest = UnsafeMutablePointer<UInt8>.alloc(MD5Length)
            
            let length = UInt32(strlen(ori))
            CC_MD5(original, length, digest)
    
            return getMD5Str(digest)
            
        }
        
        static func getMD5FromFilePath(path: String) -> NSMutableString {
            let handel = NSFileHandle(forReadingAtPath: path)
            
            if handel == nil {
                print("failed")
                return NSMutableString(string: "file is not opened")
            }
            // 先聲明一個context上下文
            var context = CC_MD5_CTX()
            // 初始化一個上下文
            CC_MD5_Init(&context)
            
            var done = true
            while done {
                var data = handel?.readDataOfLength(1024)
                // 對上下文進行更新
                CC_MD5_Update(&context, &data, UInt32((data?.length)!))
                if data?.length == 0 {
                    done = false
                }
            }
            
            let digest = UnsafeMutablePointer<UInt8>.alloc(16)
            // 最終確定上下文
            CC_MD5_Final(digest, &context)
            
            return getMD5Str(digest)
        }
        
        private static func getMD5Str(digest: UnsafeMutablePointer<UInt8>) -> NSMutableString {
            let md5String = NSMutableString(capacity: 16 * 2)
            
            for index in 0..<16 {
                md5String.appendFormat("%02x", digest[index])
            }
            digest.destroy()
            return md5String
        }
    }
    

     


  • 免責聲明!

    本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



     
    粵ICP備18138465號   © 2018-2025 CODEPRJ.COM