Java加解密學習

2021-07-25 21:02:32 字數 3011 閱讀 1692

柯克霍夫原則:資料的安全基於金鑰而不是演算法的保密。即系統的安全取決於金鑰,對金鑰保密,對演算法公開。——現代密碼學設計的基本原則。

演算法實現分為3類:jdk,common codes(cc),bouncy castle(bc),後兩者使用需要引入jar包。

1.jdk實現

base64encoder encoder = new base64encoder();

string encode = encoder.encode(src.getbytes());

system.out

.println("jdk encode:"+encode);

base64decoder decoder = new base64decoder();

system.out

.println("jdk decode:"+new string(decoder.decodebuffer(encode)));

2.cc實現:

byte encodebytes = base64.encodebase64(src.getbytes());

system.out

.println("cc encode:"+new string(encodebytes));

system.out

.println("cc decode:"+new string(base64.decodebase64(encodebytes)));

3.bc實現

byte encodebytes = org.bouncycastle

.util

.encoders

.base64.encode(src.getbytes());

byte decodebytes = org.bouncycastle

.util

.encoders

.base64.decode(encodebytes);

1.jdk實現:

messagedigest md = messagedigest.getinstance("md5");

byte mdbytes = md.digest(src.getbytes());

system.out

.println("jdk md5:"+hex.encodehexstring(mdbytes));

其中hex是引入的第三包cc中的類。

2.cc實現

system.out

.println("cc md5:"+digestutils.md5hex(src.getbytes()));

3.bc實現

digest digest = new md5digest();

digest.update(src.getbytes(),0,src.getbytes().length);

byte mdbytes = new byte[digest.getdigestsize()];

digest.dofinal(mdbytes,0);

system.out

.println("bc md5:"+org.bouncycastle

.util

.encoders

.base64.hex

.tohexstring(mybytes));

其中的hex是封裝在bc包中的。

sha演算法實現與md實現很相似

1.jdk實現

messagedigest md = messagedigest.getinstance("sha");

byte mdbytes = md.digest(src.getbytes());

system.out

.println("jdk sha1:"+hex.encodehexstring(mdbytes));

2.cc實現

system.out

.println("cc sha1:"+digestutils.sha1hex(src.getbytes()));

3.bc實現

digest digest = new sha1digest();

digest.update(src.getbytes(),0,src.getbytes().length);

byte mdbytes = new byte[digest.getdigestsize()];

digest.dofinal(mdbytes,0);

system.out

.println("bc sha1:"+org.bouncycastle

.util

.encoders

.base64.hex

.tohexstring(mybytes));

mac分為mac與hmac,是md與sha的融合。

keygennerator kg = keygenerator.getinstance("hmacmd5");

secretkey sk = kg.generatekey();//產生金鑰

//bytekey = sk.getencoded(); //獲得金鑰,隨機

bytekey = hex.decodehex(new

char);//獲得金鑰,自定義

secretkey rsk = new secretkeyspec(key, "hmacmd5");//還原金鑰

mac mac = mac.getinstance(rsk.getalgorithm());//例項化mac

mac.init(rsk);

byte hmacmd5bytes = mac.dofinal(src.getbytes());//執行摘要

system.out.println("jdk hamcmd5:"+hex.encodehexstring(hmacmd5bytes));

加解密方法

imports system imports system.security.cryptography imports system.text imports system.io public class encryptor private shared iv as byte private sha...

加解密簡介

加密技術,簽名技術的需要做到三防一確認。一防竊聽,二防篡改,三防抵賴,確認對方身份。在電子商務過程中,開始時必須確認對方身份,不然談了半天,發現網際網路那頭真是一條狗,就悲劇了。防竊聽是指,即便有人在網路傳輸過程中得到了資料,看到的也是亂七八糟,無法從中得知正常的資訊。舉個例子,談判前老總通過網路跟...

字元加解密

using system using system.security.cryptography using system.web.security using system.io using system.text using system.configuration namespace x.com...