[HackerRank]Java SHA-256

題目描述

安全雜湊演算法2(Secure Hash Algorithm 2, SHA-2)是美國國家安全局(National Security Agency, NSA)設計出來的一系列密碼學雜湊函數,它包含了六種雜湊演算法,以位元大小的不同可分為SHA-256、SHA-512、SHA-224、SHA-384、SHA-512/224和SHA-512/256。

給定一個含有數字英文字母的字串s,請計算並輸出其經過SHA-256編碼過後的值。

原題網址

https://www.hackerrank.com/challenges/sha-256

輸入格式

輸入一個含有數字英文字母的字串s,字串長度在6到20之間(包含6和20)。

輸出格式

輸出字串s經過SHA-256編碼過後的值。

範例輸入1

HelloWorld

範例輸出1

872e4e50ce9990d8b041330c47c9ddd11bec6b503ae9386a99da8584e9bb12c4

範例輸入2

Javarmi123

範例輸出2

f1d5f8d75bb55c777207c251d07d9091dc10fe7d6682db869106aacb4b7df678

解題概念

利用java.security套件提供的MessageDigest類別,可以協助進行安全性相關的演算法計算,其中當然也包括了SHA-256的運算。使用MessageDigest類別的「getInstance」方法可以指定要產生哪種演算法MessageDigest物件實體,接著呼叫MessageDigest物件的「digest」方法便可以計算從參數傳入的byte陣列,所以必須要將輸入的字串使用UTF-8編碼轉成byte陣列來作為參數傳入。

MessageDigest物件的「digest」方法會直接將計算出來的SHA-256結果以byte陣列的型態回傳,題目要求要以16進制的方式輸出256位元的SHA-256數值,所以還需要再寫一個簡單的轉換程式將byte陣列中的每個byte元素轉換成擁有兩位數(如果換算後只有一位數,還需要在左邊補0)16進制的文字字串,並串接在一起。最後才可以將這個16進制的256位元數字字串輸出。

參考答案

關於作者

Magic Len

各位好,我是Magic Len,是這網站的管理員。我是台灣台中大肚山上人,畢業於台中高工資訊科和台灣科技大學資訊工程系,曾在桃機航警局服役。我熱愛自然也熱愛科學,喜歡和別人分享自己的知識與經驗。如果你有興趣認識我,可以加我的Facebook,並且請註明是從MagicLen來的。

相關文章