Package java.security [1]
提供類別語介面的安全性架構。使這些類別實作可以更簡單的配置,更完整的控制安全套件。Package 產生密碼學上的公私鑰對,也可輸出密碼學上操作的數位訊息(message digest)和簽章(signature)。最後此類別提供 登入signed/防護guarded 物件和安全亂數產生器。
import java.io.*;
import java.security.*;
public class HancockTest {
public static void main(String[] args) throws Exception {
try{
MessageDigest md5 = MessageDigest.getInstance("MD5");
FileInputStream fis=new FileInputStream("HellowWorld.jar");
byte b;
while(fis.available()!=0){
b=(byte)fis.read();
md5.update(b);
System.out.println(b);
}
fis.close();
byte[] digest=md5.digest();
StringBuffer hexString = new StringBuffer();
for (int i=0;i<digest.length;i++) {
if(Integer.toHexString(0xFF & digest[i]).length() == 1){
hexString.append("0");
}
hexString.append(Integer.toHexString(0xFF & digest[i]));
hexString.append(" ");
}
System.out.println(hexString.toString());
}
catch(NoSuchAlgorithmException ie){
ie.printStackTrace();
}
}
}
MessageDigest:
Class MessageDigest
- java.lang.Object
- java.security.MessageDigestSpi
- java.security.MessageDigest
提供 message digest algorithm 的功能應用,像是 SHA-1 或 SHA-256。
Message digest 安全性上是個 one-way function,對於任意大小(size)的資料,
輸出固定長度(length)的值。
MessageDigest 物件先初使化。檔案的程序使用 update 方法,也可以使用 reset物件做重製。當檔案做好 update,就使用 digest 方法來完成 Hash 的運算。
digest 方法能夠呼叫經過 update 的值,之後才還成 digest 的呼叫,而 MessageDigest 則會更新初使化的狀態。
實作後請記得關閉(cloneable)介面,否則會跳出例外。
MessageDigest md = MessageDigest.getInstance("SHA");
try { md.update(toChapter1); MessageDigest tc1 = md.clone(); byte[] toChapter1Digest = tc1.digest(); md.update(toChapter2); ...etc. } catch (CloneNotSupportedException cnse) { throw new DigestException("couldn't make digest of partial content"); }
MessageDigest
提供三種演算法 [2],MD 5
SHA-1
SHA-256
MessageDigest 下的 getInstance()
static MessageDigest getInstance(String algorithm)
static MessageDigest getInstance(String algorithm, Provider provider)
static MessageDigest getInstance(String algorithm, String provider)
MessageDigest 下的 update()
void update(byte input)
- Updates the digest using the specified byte.
void update(byte[] input)
- Updates the digest using the specified array of bytes.
void update(byte[] input, int offset, int len)
- Updates the digest using the specified array of bytes, starting at the specified offset.
void update(byteBuffer input)
- Update the digest using the specified ByteBuffer.
MessageDigest 下的 digest()
Updates the digest using the specified byte.
byte[] digest(byte[] input)
Performs a final update on the digest using the specified array of bytes, then completes the digest computation.
以上打的落落長還是點點懂,以後有機會在整理一下或重新po文章。
[1] https://docs.oracle.com/javase/7/docs/api/java/security/package-summary.html#package_description
[2] https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#MessageDigest
[3]https://dotblogs.com.tw/chhuang/2011/01/19/20883
沒有留言:
張貼留言