柯克霍夫原則:資料的安全基於金鑰而不是演算法的保密。即系統的安全取決於金鑰,對金鑰保密,對演算法公開。——現代密碼學設計的基本原則。
演算法實現分為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...