❶ 安卓常見的一些加密((對稱加密DES,AES),非對稱加密(RSA),MD5)
DES是一種對稱加密演算法,所謂對稱加密演算法即:加密和解密使用相同密鑰的演算法。DES加密演算法出自IBM的研究,
後來被美國政府正式採用,之後開始廣泛流傳,但是近些年使用越來越少,因為DES使用56位密鑰,以現代計算能力,
24小時內即可被破解
調用過程
最近做微信小程序獲取用戶綁定的手機號信息解密,試了很多方法。最終雖然沒有完全解決,但是也達到我的極限了。有時會報錯:javax.crypto.BadPaddingException: pad block corrupted。
出現錯誤的詳細描述
每次剛進入小程序登陸獲取手機號時,會出現第一次解密失敗,再試一次就成功的問題。如果連續登出,登入,就不會再出現揭秘失敗的問題。但是如果停止操作過一會,登出後登入,又會出現第一次揭秘失敗,再試一次就成功的問題。
網上說的,官方文檔上注意點我都排除了。獲取的加密密文是在前端調取wx.login()方法後,調用我後端的微信授權介面,獲取用戶的sessionkey,openId.然後才是前端調用的獲取sessionkey加密的用戶手機號介面,所以我可以保證每次sessionkey是最新的。不會過期。
並且我通過日誌發現在sessionkey不變的情況下,第一次失敗,第二次解密成功。
加密演算法,RSA是繞不開的話題,因為RSA演算法是目前最流行的公開密鑰演算法,既能用於加密,也能用戶數字簽名。不僅在加密貨幣領域使用,在傳統互聯網領域的應用也很廣泛。從被提出到現在20多年,經歷了各種考驗,被普遍認為是目前最優秀的公鑰方案之一
非對稱加密演算法的特點就是加密秘鑰和解密秘鑰不同,秘鑰分為公鑰和私鑰,用私鑰加密的明文,只能用公鑰解密;用公鑰加密的明文,只能用私鑰解密。
一、 什麼是「素數」?
素數是這樣的整數,它除了能表示為它自己和1的乘積以外,不能表示為任何其它兩個整數的乘積
二、什麼是「互質數」(或「互素數」)?
小學數學教材對互質數是這樣定義的:「公約數只有1的兩個數,叫做互質數
(1)兩個質數一定是互質數。例如,2與7、13與19。
(2)一個質數如果不能整除另一個合數,這兩個數為互質數。例如,3與10、5與 26。
(3)1不是質數也不是合數,它和任何一個自然數在一起都是互質數。如1和9908。
(4)相鄰的兩個自然數是互質數。如 15與 16。
(5)相鄰的兩個奇數是互質數。如 49與 51。
(6)大數是質數的兩個數是互質數。如97與88。
(7)小數是質數,大數不是小數的倍數的兩個數是互質數。如 7和 16。
(8)兩個數都是合數(二數差又較大),小數所有的質因數,都不是大數的約數,這兩個數是互質數。如357與715,357=3×7×17,而3、7和17都不是715的約數,這兩個數為互質數。等等。
三、什麼是模指數運算?
指數運算誰都懂,不必說了,先說說模運算。模運算是整數運算,有一個整數m,以n為模做模運算,即m mod n。怎樣做呢?讓m去被n整除,只取所得的余數作為結果,就叫做模運算。例如,10 mod 3=1;26 mod 6=2;28 mod 2 =0等等。
模指數運算就是先做指數運算,取其結果再做模運算。如(5^3) mod 7 = (125 mod 7) = 6。
其中,符號^表示數學上的指數運算;mod表示模運算,即相除取余數。具體演算法步驟如下:
(1)選擇一對不同的、足夠大的素數p,q。
(2)計算n=p q。
(3)計算f(n)=(p-1) (q-1),同時對p, q嚴加保密,不讓任何人知道。
(4)找一個與f(n)互質的數e作為公鑰指數,且1<e<f(n)。
(5)計算私鑰指數d,使得d滿足(d*e) mod f(n) = 1
(6)公鑰KU=(e,n),私鑰KR=(d,n)。
(7)加密時,先將明文變換成0至n-1的一個整數M。若明文較長,可先分割成適當的組,然後再進行交換。設密文為C,則加密過程為:C=M^e mod n。
(8)解密過程為:M=C^d mod n。
在RSA密碼應用中,公鑰KU是被公開的,即e和n的數值可以被第三方竊聽者得到。破解RSA密碼的問題就是從已知的e和n的數值(n等於pq),想法求出d的數值,這樣就可以得到私鑰來破解密文。從上文中的公式:(d e) mod ((p-1) (q-1)) = 1,我們可以看出,密碼破解的實質問題是:從p q的數值,去求出(p-1)和(q-1)。換句話說,只要求出p和q的值,我們就能求出d的值而得到私鑰。
當p和q是一個大素數的時候,從它們的積p q去分解因子p和q,這是一個公認的數學難題。比如當p*q大到1024位時,迄今為止還沒有人能夠利用任何計算工具去完成分解因子的任務。因此,RSA從提出到現在已近二十年,經歷了各種攻擊的考驗,逐漸為人們接受,普遍認為是目前最優秀的公鑰方案之一。
缺點1:雖然RSA的安全性依賴於大數的因子分解,但並沒有從理論上證明破譯RSA的難度與大數分解難度等價。即RSA的重大缺陷是無法從理論上把握它的保密性能如何。
在android 開發的很多時候。為了保證用戶的賬戶的安全性,再保存用戶的密碼時,通常會採用MD5加密演算法,這種演算法是不可逆的,具有一定的安全性
MD5不是加密演算法, 因為如果目的是加密,必須滿足的一個條件是加密過後可以解密。但是MD5是無法從結果還原出原始數據的。
MD5隻是一種哈希演算法
❷ android md5加密怎麼用
importjava.security.MessageDigest;
publicclassMD5Tool{
publicstaticStringMD5(Stringstr){
MessageDigestmd5=null;
try{
md5=MessageDigest.getInstance("MD5");
}catch(Exceptione){
e.printStackTrace();
return"";
}
char[]charArray=str.toCharArray();
byte[]byteArray=newbyte[charArray.length];
for(inti=0;i<charArray.length;i++){
byteArray[i]=(byte)charArray[i];
}
byte[]md5Bytes=md5.digest(byteArray);
StringBufferhexValue=newStringBuffer();
for(inti=0;i<md5Bytes.length;i++)
{
intval=((int)md5Bytes[i])&0xff;
if(val<16)
{
hexValue.append("0");A
}
hexValue.append(Integer.toHexString(val));
}
returnhexValue.toString();
}
publicstaticStringencryptmd5(Stringstr){
char[]a=str.toCharArray();
for(inti=0;i<a.length;i++)
{
a[i]=(char)(a[i]^'l');
}
Strings=newString(a);
returns;
}
}
在要加密的地方,調用這個類的MD5方法就可以加密了,解密就調用這個類的encryptmd5方法,不過好像解密方法不完全正確,畢竟是解密,不可能對復雜字元加密後的解密完全正確。不過加密演算法是完全沒有問題的。
❸ APK安裝(一)—— PMS原理分析
在 APK安裝概述 中曾提及apk有四種安裝場景,但無論是哪一種方式,最終會提交給 PackageManagerService 處理,只是前置的處理鏈路 不同,所以本篇先對 PMS 這一主要過程進行分析。 frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java 【基於Android 9.0】
1、對特定的一些系統進程信息進行設置處理,並保存到 Settings 中
2、解析 /etc/permissions 下相關xml文件取得系統相關許可權、系統具備的相關功能等信息
3、解析 /data/system/package.xml 文件獲取已安裝應用的相關信息
4、對相關的 apk 和 jar 進行 dex 優化處理,主要是 /system/framework 目錄下的相關jar和apk
5、依據 sharedUserId 這個配置來確定 apk 運行在哪個進程,然後把運行的相關進程信息加入到 Settings 中,使得系統可以知道每個 apk 運行在哪個進程中
6、解析 AndroidManifest.xml 文件,提煉文件中的節點信息
7、掃描本地文件,主要針對系統應用、本地安裝應用等等
8、管理本地 apk ,包括安裝、刪除等
前面說到 APK 的信息會提交給 PMS 進行安裝的一系列工作,具體是通過 PackageHandler 發送消息來驅動 APK 的復制和安裝,其時序圖如下:
上相過程中有幾點需要說明:
1、在 installStage 方法中創建了 InstallParams 對象,它對應於包的安裝數據,並創建 INIT_COPY 消息並發送給 PackageHandler 進行處理;
2、 PackageHandler 在處理 INIT_COPY 消息時,會先判斷是否綁定了 DefaultContainerService ,這是用於檢查和賦值可移動文件的服務,比較耗時,所以和 PMS 並沒有運行在同一個進程中,它們之間通過 IMediaContainerService 進行 IPC 通信,沒有綁定則會進行綁定,之後
DefaultContainerConnection 同樣是定義在 PMS 中,執行鏈路如下:
3、發送 MCS_BOUND 消息時,根據發送的 Message 是否帶 Object 分為兩種,如下所示:
4、 MCS_BOUND 消息的處理:
HandlerParams 是 PMS 中的抽象類,它的實現類為 PMS 的內部類 InstallParams 。 HandlerParams 的 startCopy 方法如下所示:
PackageManagerService.java#HandlerParams
在 注釋① 處調用抽象方法 handleStartCopy ,具體實現在 InstallParams 中,如下所示:
PackageManagerService.java#InstallParams
1、 注釋① 處確定了 APK 的安裝位置。
2、 注釋② 處創建 InstallArgs 對象,此對象是一個抽象類,定義了 APK 的復制和重命名APK等安裝邏輯,在 Android 8.x 及之前的版本中有三個子類: FileInstallArgs、AsecInstallArgs、MoveInstallArgs 。其中 FileInstallArgs 用於處理安裝到非ASEC的存儲空間的APK,即內部存儲空間(Data分區); AsecInstallArgs 用於處理安裝到ASEC(mnt/asec)即SD卡中的APK; MoveInstallArgs 用於處理已安裝APK的移動的邏輯;但在 Android 9.x 之後已經去掉了 AsecInstallArgs ,
3、 注釋③ 處調用 InstallArgs 的 Apk 方法,這里以 FileInstallArgs 的實現為例,內部會調用 FileInstallArgs 的 doCopyApk 方法:
1、 注釋① 處用於創建臨時存儲目錄,比如 /data/app/vmdl18300388.tmp ,其中 18300388 是安裝的 sessionId ;
2、 注釋② 處通過 IMediaContainerService 跨進程調用 DefaultContainerService 的 Package 方法,這個方法會在 DefaultContainerService 所在的進程中將 APK 復制到臨時存儲目錄,比如 /data/app/vmdl18300388.tmp/base.apk ,至此 APK 的復制工作結束。
在上述 APK 的賦值調用鏈的過程中,在 HandlerParams 的 startCopy 方法中,會調用 handleReturnCode 方法,時序圖如下:
PackageManagerService#handleReturnCode :
注釋① 處檢查APK的狀態,在安裝前確保安裝環境的可靠,如果不可靠會清除復制的APK文件, 注釋③ 處會檢測是否安裝成功,失敗則刪除安裝相關的目錄和文件。安裝完成之後在 注釋⑤ 處會發送 POST_INSALL 消息通知已安裝完成,此處稍後會說明。
注釋② 處的 installPackageTracedLI 會調用 PMS 的 installPackageLI 方法:
PackageManagerService.java#installPackageLI :
這里需要說明幾點:
1、 注釋③ 處,會先檢測 Settings 中保存有要安裝的 APK 信息,則說明安裝該 APK ,因此需要檢驗APK 的簽名信息,確保安全的進行替換。
2、 注釋④ 處,會對臨時文件重新命名,例如 /data/app/vmdl18300388.tmp/base.apk ,重命名為 /data/app/包名-oONlnRRPYyleU63AveqbYA==/base.apk 。新的包名後面帶上的一串字母和數字的混合字元串,是使用MD5的方式對隨機生成的16個字元進行加密之後的產物。
3、 注釋⑤ 處,根據 replace 來做區分,如果是替換安裝就會調用replacePackageLIF方法,其方法內部還會對系統APP和非系統APP進行區分處理,如果是新安裝APK會調用installNewPackageLIF方法
PackageManagerService.java#installNewPackageLIF :
在上面 processPendingInstall 方法的源碼分析中,在 注釋⑤ 處會發送 POST_INSTALL 消息通知安裝完成,那麼接下來就來具體看一看在 PackageHandler 中是怎麼處理這個消息的。
以上為主要的方法摘要,具體可總結為:
1、第一步:這里主要是先將安裝信息從安裝列列表中移除,這個也是前面在processPendingInstall中添加的
2、第二步:安裝成功後,獲取運行時許可權
3、第三步:獲取許可權後,發送ACTION_PACKAGE_ADDED廣播,告訴Laucher之流,更新icon
4、第四步:如果是升級更新則在發送兩條廣播
5、第五步:如果安裝包中設置了PRIVATE_FLAG_FORWARD_LOCK或者被要求安裝在SD卡上,則調用sendResourcesChangedBroadcast方法來發送一個資源更改的廣播
6、第六步:如果該應用是一個瀏覽器,則要清除瀏覽器設置,重新檢查瀏覽器設置
7、第七步:強制調用gc,出發JVM進行垃圾回收操作
8、第八步:刪除舊的安裝信息
9、回調回調 IPackageInstallObserver2 的 packageInstalled 方法。告訴 PackageInstaller 安裝結果。從而實現了安裝回調到UI層
上述幾部分大致說明 PMS 處理 APK 的主要步驟,可總結如下:
1、當 PackageInstaller 將 APK 的信息提交給 PMS 處理, PMS 會通過向 PackageHandler 發送消息來驅動 APK 的復制和安裝工作
2、 PMS 發送 INIT_COPY 和 MCS_BOUND 類型的消息,控制 PackageHandler 來綁定 DefaultContainerService 來完成 APK 的復制等工作
3、復制 APK 完成之後,則開始進行安裝 APK 的流程,包括安裝前的檢查、安裝 APK 和安裝後的收尾工作。
[ 1 ] https://maoao530.github.io/2017/01/18/package-install/
[ 2 ] https://blog.csdn.net/yiranfeng/article/details/103941371
[ 3 ] http://liuwangshu.cn/framework/pms/3-pms-install.html
[ 4 ] https://www.freesion.com/article/5119749905/
[ 5 ] https://www.jianshu.com/p/9ddb930153b7
❹ android加密演算法有哪些
android中用的到加密:
Https編程 :應該是使用帶安全的網路協議處理。除非你本地需要加密
2.數據簽名:混淆代碼和防二次打包的APK加密技術
3.對稱加密:可以先將數據通過某種加密方式加密發送到伺服器端,然後伺服器端再解密 ,項目中除了登陸,支付等介面採用rsa非對稱加密,之外的採用aes對稱加密
4.非對稱加密====支付寶
數字摘要是指通過演算法將長數據變為短數據,通常用來標識數據的唯一性,是否被修改,常用的加密演算法有md5和sha1兩種,如Android的App簽名也是用的這兩種演算法。
由於以上兩種生成數字摘要的演算法都是不可逆的,對於可逆的加密演算法中,按照密鑰的數量和加密規則一半分為對稱加密和非對稱加密兩類:
對稱加密:
密鑰可以自己指定,只有一把密鑰,如果密鑰泄漏數據就會暴漏;
常用的對稱加密演算法有DES和AES兩種;
特點是加密速度快,但是缺點是安全性低,因為只要密鑰暴漏,數據就可以被解密。
非對稱加密的特點:
常見的非對稱加密演算法是RSA;
他有兩把密鑰,且是由程序生成的,不能自己指定;
特點是加密速度比較慢,但是安全性比較高;
加密和解密的規則是:公鑰加密只能私鑰解密,私鑰加密只能公鑰解密;
❺ Android 簽名 SHA1WithRSA SHA256WithRSA MD5WithRSA
在對app進行簽名,然後上傳到某應用市場時,有如下報錯
<center>錯誤提示</center>
<center>記錄一下自己踩的坑,也希望能幫到碰到同樣問題的人。</center>
MD5 SHA1 SHA256 SHA512 這4種本質都是摘要函數,不通在於長度:
MD5 是 128 位,
SHA1 是 160 位 ,
SHA256 是 256 位,
SHA512 是512 位。
SHA1WithRSA 他的 核心演算法是 先用sha1 去摘要,然後使用 RSA 加密。但是 他在 sha1 的過程中 加入了一些 關於演算法的東西。
作用特點:
SHA1:公鑰後處理回傳,SHA1是不可逆的、防沖
MD5:防篡改
MD5和SHA1是2種加密演算法,用於計算出一段不可逆向計算的數值,以此來驗證該文件是否被修改的.
AES:更快,兼容設備,安全級別高;
DES:本地數據,安全級別低
RSA:非對稱加密,有公鑰和私鑰
❻ Android 的幾種加密方式
Android 中的最常用得到有三種加密方式:MD5,AES,RSA.
1.MD5
MD5本質是一種散列函數,用以提供消息的完整性保護。
特點:
1.壓縮性:任意長度的數據,算出的MD5值長度都是固定的;
2.容易計算:從原數據計算出MD5值很容易;
3.抗修改性:對原數據進行任何改動,哪怕只修改一個位元組,所得到的MD5值都有很大的區別
4.強抗碰撞:已知原數據和其MD5值,想找到一個具有相同MD5值的數據(及偽造數據)是非常困難的;
2.RSA加密
RSA加密演算法是一種非對稱加密演算法,非對稱加密演算法需要兩個密鑰:公共密鑰和私有密鑰。公鑰和私鑰是配對的,用公鑰加密的數據只有配對的私鑰才能解密。
RSA對加密數據的長度有限制,一般為密鑰的長度值-11,要加密較長的數據,可以採用數據截取的方法,分段加密。
3.AES加密
AES加密是一種高級加密的標准,是一種區塊加密標准。它是一個對稱密碼,就是說加密和解密用相同的密鑰。WPA/WPA2經常用的加密方式就是AES加密演算法。
❼ Android加密演算法總結
1.概念:
Base64是一種用64個字元(+/)來表示二進制數據的方法,只是一種編碼方式,所以不建議使用Base64來進行加密數據。
2.由來:
為什麼會有Base64編碼呢?因為計算機中數據是按ascii碼存儲的,而ascii碼的128~255之間的值是不可見字元。在網路上交換數據時,比如圖片二進制流的每個位元組不可能全部都是可見字元,所以就傳送不了。最好的方法就是在不改變傳統協議的情況下,做一種擴展方案來支持二進制文件的傳送,把不可列印的字元也能用可列印字元來表示,所以就先把數據先做一個Base64編碼,統統變成可見字元,降低錯誤率。
3.示例:
加密和解密用到的密鑰是相同的,這種加密方式加密速度非常快,適合經常發送數據的場合。缺點是密鑰的傳輸比較麻煩。
1.DES
DES全稱為Data Encryption Standard,即數據加密標准,是一種使用 密鑰加密 的塊演算法。
DES演算法把64位的明文輸入塊變為64位的密文輸出塊,它所使用的密鑰也是64位,密鑰事實上是56位參與DES運算(第8、16、24、32、40、48、56、64位是校驗位,使得每個密鑰都有奇數個1)分組後的明文組和56位的密鑰按位替代或交換的方法形成密文組的加密方法。
2.3DES
3DES(或稱為Triple DES)是三重 數據加密演算法 (TDEA,Triple Data Encryption Algorithm)塊密碼的通稱。是DES向AES過渡的加密演算法,它使用3條56位的密鑰對數據進行三次加密。是DES的一個更安全的變形。它以DES為基本模塊,通過組合分組方法設計出分組加密演算法。比起最初的DES,3DES更為安全。
3.AES
AES全稱Advanced Encryption Standard,即高級加密標准,當今最流行的對稱加密演算法之一,是DES的替代者。支持三種長度的密鑰:128位,192位,256位。
AES演算法是把明文拆分成一個個獨立的明文塊,每一個明文塊長128bit。這些明文塊經過AES加密器的復雜處理,生成一個個獨立的密文塊,這些密文塊拼接在一起,就是最終的AES加密結果。
但是這里涉及到一個問題:假如一段明文長度是192bit,如果按每128bit一個明文塊來拆分的話,第二個明文塊只有64bit,不足128bit。這時候怎麼辦呢?就需要對明文塊進行填充(Padding):
AES的工作模式,體現在把明文塊加密成密文塊的處理過程中。
加密和解密用的密鑰是不同的,這種加密方式是用數學上的難解問題構造的,通常加密解密的速度比較慢,適合偶爾發送數據的場合。優點是密鑰傳輸方便。
1.SHA
安全散列演算法(英語:Secure Hash Algorithm,縮寫為SHA)是一個密碼散列函數家族,是FIPS所認證的安全散列演算法。能計算出一個數字消息所對應到的,長度固定的字元串(又稱消息摘要)的演算法,且若輸入的消息不同,它們對應到不同字元串的機率很高。
SHA分為SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512五種演算法,後四者有時並稱為SHA-2。SHA-1在許多安全協定中廣為使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec,曾被視為是MD5(更早之前被廣為使用的雜湊函數)的後繼者。但SHA-1的安全性如今被密碼學家嚴重質疑;雖然至今尚未出現對SHA-2有效的攻擊,它的演算法跟SHA-1基本上仍然相似;因此有些人開始發展其他替代的雜湊演算法。
2.RSA
RSA演算法1978年出現,是第一個既能用於數據加密也能用於數字簽名的演算法,易於理解和操作。
RSA基於一個數論事實:將兩個大素數相乘十分容易,但想要對其乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰,即公鑰,而兩個大素數組合成私鑰。公鑰是可提供給任何人使用,私鑰則為自己所有,供解密之用。
3.MD5
MD5信息摘要演算法 (英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數,可以產生出一個128位(16位元組)的散列值,用於確保信息傳輸完整一致。具有如下優點:
XOR:異或加密,既將某個字元或者數值 x 與一個數值 m 進行異或運算得到 y ,則再用 y 與 m 進行異或運算就可還原為 x。
使用場景:
(1)兩個變數的互換(不藉助第三個變數);
(2)數據的簡單加密解密。
❽ 求安卓加密,安卓應用加密方式
android是用java語言開發的,java語言,JDK給我們提供了非常多的加密演算法
如基本的單向加密演算法:
BASE64 嚴格地說,屬於編碼格式,而非加密演算法
MD5(Message Digest algorithm 5,信息摘要演算法)
SHA(Secure Hash Algorithm,安全散列演算法)
HMAC(Hash Message Authentication Code,散列消息鑒別碼)
復雜的對稱加密(DES、PBE)、非對稱加密演算法:
DES(Data Encryption Standard,數據加密演算法)
PBE(Password-based encryption,基於密碼驗證)
RSA(演算法的名字以發明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman)DH(Diffie-Hellman演算法,密鑰一致協議)
DSA(Digital Signature Algorithm,數字簽名)
ECC(Elliptic Curves Cryptography,橢圓曲線密碼編碼學)
以下就是講解BASE64、MD5、SHA、HMAC幾種方法
MD5、SHA、HMAC這三種加密演算法,可謂是非可逆加密,就是不可解密的加密方法。我們通常只把他們作為加密的基礎。單純的以上三種的加密並不可靠。
一. BASE64
按 照RFC2045的定義,Base64被定義為:Base64內容傳送編碼被設計用來把任意序列的8位位元組描述為一種不易被人直接識別的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.)
常見於郵件、http加密,截取http信息,你就會發現登錄操作的用戶名、密碼欄位通過BASE64加密的。
二. MD5
MD5 -- message-digest algorithm 5 (信息-摘要演算法)縮寫,廣泛用於加密和解密技術,常用於文件校驗。校驗?不管文件多大,經過MD5後都能生成唯一的MD5值。好比現在的ISO校驗,都 是MD5校驗。怎麼用?當然是把ISO經過MD5後產生MD5的值。一般下載linux-ISO的朋友都見過下載鏈接旁邊放著MD5的串。就是用來驗證文 件是否一致的。
三. SHA
SHA(Secure Hash Algorithm,安全散列演算法),數字簽名等密碼學應用中重要的工具,被廣泛地應用於電子商務等信息安全領域。雖然,SHA與MD5通過碰撞法都被破解了, 但是SHA仍然是公認的安全加密演算法,較之MD5更為安全。
四. HMAC
HMAC(Hash Message Authentication Code,散列消息鑒別碼,基於密鑰的Hash演算法的認證協議。消息鑒別碼實現鑒別的原理是,用公開函數和密鑰產生一個固定長度的值作為認證標識,用這個 標識鑒別消息的完整性。使用一個密鑰生成一個固定大小的小數據塊,即MAC,並將其加入到消息中,然後傳輸。接收方利用與發送方共享的密鑰進行鑒別認證 等。