JCA 實踐記錄——Message Authentication Codes(MAC)

javax.crypto.Mac 類是JCA中提供信息認(rèn)證碼服務(wù)的類崖瞭,用于檢測消息的的正確性淋叶「琅伲可用于用戶身份認(rèn)證的密碼存儲和驗證環(huán)節(jié)(取代普通的消息摘要算法)码俩。

實例化

Mac沒有公開的構(gòu)造方法度帮,所以只能調(diào)用其靜態(tài)方法getInstace進(jìn)行實現(xiàn)化。這個方法有多個重載如下:

public static final Mac getInstance(String algorithm) throws NoSuchAlgorithmException

public static final Mac getInstance(String algorithm, Provider provider) 
    throws NoSuchAlgorithmException 

public static final Mac getInstance(String algorithm, String provider) 
    throws NoSuchAlgorithmException, NoSuchProviderException

我們通常使用的是public static final Mac getInstance(String algorithm)稿存;此方法需要一個字符串作為參數(shù)笨篷,用于說明使用哪個MAC算法。

初始化

可用的初始化方法如下:

public final void init(Key key) throws InvalidKeyException;

public final void init(Key key, AlgorithmParameterSpec algorithmParameterSpec )
     throws InvalidKeyException, InvalidAlgorithmParameterException 

通常我們使用public final void init(Key key) throws InvalidKeyException;就足夠了瓣履。這個方法需要以一個Key對象為參數(shù)對Mac實例進(jìn)行初始化率翅。

update 方法

public final void update(byte b) throws IllegalStateException;
public final void update(byte[] bytes) throws IllegalStateException;
public final void update(byte[] bytes, int offset, int length) throws IllegalStateException;
public final void update(ByteBuffer byteBuffer);

使用指定信息更新生成的消息摘要;

reset 重置消息摘要方法

public final void reset();

重置當(dāng)前實例的消息摘要袖迎,以備后用冕臭;

doFinal 生成用于信息驗證碼的消息摘要

public final byte[] doFinal() throws IllegalStateException;
public final byte[] doFinal(byte[] bytes) throws IllegalStateException;

生成消息摘要腺晾,并以byte數(shù)組形式返回;
如果有參數(shù)辜贵,則先使用參數(shù)調(diào)用update方法悯蝉,再調(diào)用無參doFinal。

public final void doFinal(byte[] bytes, int offset) throws ShortBufferException, IllegalStateException;

把生成的消息摘要存儲到指定byte數(shù)組的指定位置托慨,返回空鼻由。

支持的算法

  1. HmacMd5
  2. hmacSha1
  3. hmacSha224
  4. hmacSha256
  5. hmacSha384
  6. hmacSha512

注:不區(qū)別大小寫

示例

Mac hmacMd5 = Mac.getInstance("HmacMd5");
hmacMd5.init(new SecretKeySpec("1".getBytes(), hmacMd5.getAlgorithm()));
hmacMd5.update("1".getBytes());
System.out.println("hmacMd5:" + DatatypeConverter.printHexBinary(hmacMd5.doFinal()));

Mac hmacSha1 = Mac.getInstance("hmacSha1");
hmacSha1.init(new SecretKeySpec("1".getBytes(), hmacSha1.getAlgorithm()));
hmacSha1.update("1".getBytes());
System.out.println("hmacSha1:" + DatatypeConverter.printHexBinary(hmacSha1.doFinal()));


Mac hmacSha224 = Mac.getInstance("hmacSha224");
hmacSha224.init(new SecretKeySpec("1".getBytes(), hmacSha224.getAlgorithm()));
hmacSha224.update("1".getBytes());
System.out.println("hmacSha224:" + DatatypeConverter.printHexBinary(hmacSha224.doFinal()));

Mac hmacSha256 = Mac.getInstance("hmacSha256");
hmacSha256.init(new SecretKeySpec("1".getBytes(), hmacSha256.getAlgorithm()));
hmacSha256.update("1".getBytes());
System.out.println("hmacSha256:" + DatatypeConverter.printHexBinary(hmacSha256.doFinal()));

Mac hmacSha384 = Mac.getInstance("hmacSha384");
hmacSha384.init(new SecretKeySpec("1".getBytes(), hmacSha384.getAlgorithm()));
hmacSha384.update("1".getBytes());
System.out.println("hmacSha384:" + DatatypeConverter.printHexBinary(hmacSha384.doFinal()));

Mac hmacSha512 = Mac.getInstance("hmacSha512");
hmacSha512.init(new SecretKeySpec("1".getBytes(), hmacSha512.getAlgorithm()));
hmacSha512.update("1".getBytes());
System.out.println("hmacSha512:" + DatatypeConverter.printHexBinary(hmacSha512.doFinal()));
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市厚棵,隨后出現(xiàn)的幾起案子嗡靡,更是在濱河造成了極大的恐慌,老刑警劉巖窟感,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讨彼,死亡現(xiàn)場離奇詭異,居然都是意外死亡柿祈,警方通過查閱死者的電腦和手機(jī)哈误,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來躏嚎,“玉大人蜜自,你說我怎么就攤上這事÷叮” “怎么了重荠?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長虚茶。 經(jīng)常有香客問我戈鲁,道長,這世上最難降的妖魔是什么嘹叫? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任婆殿,我火速辦了婚禮,結(jié)果婚禮上罩扇,老公的妹妹穿的比我還像新娘婆芦。我一直安慰自己,他們只是感情好喂饥,可當(dāng)我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布消约。 她就那樣靜靜地躺著,像睡著了一般员帮。 火紅的嫁衣襯著肌膚如雪或粮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天集侯,我揣著相機(jī)與錄音被啼,去河邊找鬼帜消。 笑死,一個胖子當(dāng)著我的面吹牛浓体,可吹牛的內(nèi)容都是我干的泡挺。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼命浴,長吁一口氣:“原來是場噩夢啊……” “哼娄猫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起生闲,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤媳溺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后碍讯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悬蔽,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年捉兴,在試婚紗的時候發(fā)現(xiàn)自己被綠了蝎困。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡倍啥,死狀恐怖禾乘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情虽缕,我是刑警寧澤始藕,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站氮趋,受9級特大地震影響伍派,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凭峡,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一拙已、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧摧冀,春花似錦、人聲如沸系宫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扩借。三九已至椒惨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間潮罪,已是汗流浹背康谆。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工领斥, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人沃暗。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓月洛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親孽锥。 傳聞我的和親對象是個殘疾皇子嚼黔,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,976評論 2 355