|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
市场分额,java比asp高一点,因为C#是仿照java开发的,所以哦C#能做的java都能做到,但是java能做的,C#不一定都能做到。毕竟是抄袭吗。1.密aW介C加密c解密
加密是一⒂用艿馁Y料用一些W算D成一F使人看不懂的|西的^程;解密t是⒓用芪霓DQ回原始笔墨的^程。@^程中,饰演原始笔墨c加密笔墨之gDQ的W演算法QCipher。
D1Cipher的作
F代的Cipher多数Key砑用芘c解密Y料。所^Key是指一C密值,我可⑺橐煌ㄐ忻艽a。加密笔墨必须利用τ车Key才干解密樵嘉淖帧
A.ΨQ型Cipher
ΨQ型Cipher在魉投伺c吸收端所用的Key是一拥模D2所示,ΨQ型Cipher又叫PrivateKeyCipher,因Key的值只要魉投撕徒邮斩酥馈H绻械谌咧懒PrivateKey值,也就可以解_加密的Y料。
D2ΨQ型Cipher的作
B.非ΨQ型Cipher
非ΨQ型的Cipher又叫PublicKeyCipher,Cipher除PrivateKey外,M一能够S意散l的PublicKey。被PublicKey加密的Y料只要相τ车PrivateKey能够解_,同拥谋PrivateKey加密的Y料也只要相τ车PublicKey能够解_。如D3所示,@示了非ΨQ型Cipher的作^程。
D3非ΨQ型Cipher的作
C.息择要(MessageDigest)
息择要是一M进Y料算所得的一特e底郑湓磉作就如hashfunction一样平常。在密aW的用e,通常为用眚CY料是不是被Z改。
2.JCE下d
因槊ㄒ南拗疲Sun在JDKe只供应了少档募用芊椒ǎ漯N年夜部分t只在SunJCEe供应,并且SunJCE的API限定只要美⒓幽么蟮^能够下d。表1Sun及SunJCE分e增援的加密演算法。
名Q
型e
Sun
MD5
息择要
SHA-1
息择要
DSA
章
SunJCE
HmacMD5
MAC
HmacSHA1
MAC
DES
ΨQ型Cipher
DESede
非ΨQ型Cipher
PBEWithMD5AndDES
ΨQ型Cipher
DH
Key的交Q
表1Sun及SunJCE增援的加密演算法
m然美ㄒ羞@拥南薅ǎ窃诿惩庖惨呀有S商作出JCE,K且能够在W路上间接下d,表2就是下dW址的列表。
套件
W址
免M
JCE
http://java.sun.com/products/jdk/1.2/jce/
是
Cryptix
http://www.cryptix.org/
是
IAIK
http://wwwjce.iaik.tu-graz.ac.at/
否
表2JCEw下dW址
3.JCE安b
解嚎s到JDK面前目今
SetClassPath=C:JDKincryptix-jce-api.jar;C:JDKincryptix-jce-compat.jar;C:JDKincryptix-jce-provider.jar…
在JDK/lib/security/java.security中到场
security.provider.1=sun.security.provider.Sun(原砭陀械)
security.provider.2=cryptix.jce.provider.Cryptix(到场)
4.程式例
在e例之前,我先完成一公用e,用⒆执D成十六M位暗示法。
publicclassMsg{
publicstaticStringtoHexString(byte[]b){
StringBufferhexString=newStringBuffer();
StringplainText;
for(inti=0;i<b.length;i++){
plainText=Integer.toHexString(0xFF&b[i]);
if(plainText.length()<2){
plainText="0"+plainText;
}
hexString.append(plainText);
}
returnhexString.toString();
}
}
5.息择要(messagedigest,以SHA1槔)
a生息择要的步E:
呼唤getInstance获得MessageDigestw
呼唤update①Y料joMessageDigest
呼唤digesta生息择要
importjava.security.*;
publicclassSHAextendsObject{
publicstaticvoidmain(String[]args)throwsException
{
MessageDigestmd=MessageDigest.getInstance("SHA");
md.update(args[0].getBytes());
byte[]digest=md.digest();
System.out.println(Msg.toHexString(digest));
}
}
ps.比^息择要是不是不异r,可呼唤isEqual。
6.息JCa(MAC,以HmacSHA1槔)
息JCa只是在a生息择要的^程e,加M一把key做楸Wo,目标是使息择要更y被破解。
a生息JCa的步E:
使用密aa生一把key
呼唤getInstance获得Macw
呼唤init,初始化Mac
呼唤updatejY料oMac
呼唤doFinala生息JCa
importjava.security.*;
importjavax.crypto.*;
importjavax.crypto.spec.*;
publicclassMacSHA{
publicstaticvoidmain(String[]args)
{
SecureRandomsr=newSecureRandom();
byte[]keyBytes=newbyte[20];
sr.nextBytes(keyBytes);
SecretKeykey=newSecretKeySpec(keyBytes,"HmacSHA");
try{
Macm=Mac.getInstance("HmacSHA");
m.init(key);
m.update(args[0].getBytes());
byte[]mac=m.doFinal();
System.out.println(Msg.toHexString(mac));
}
catch(Exceptione){
System.out.println("Exception!!");
}
}
}
7.加密c解密(以DES槔)
@ee的加密/解密是ΨQ型Cipher;在金融买卖e,经常使用ΨQ型Cipher砑/解密Y料。
加密/解密的步E:
使用密aa生一把key
呼唤getInstancea生一Cipher物件
呼唤initO定榧用芑蚪饷
加密/解密
importjava.io.*;
importjava.security.*;
importjavax.crypto.*;
publicclassPwdDES{
publicstaticfinalintkBufferSize=8192;
publicstaticvoidmain(String[]args)throwsException{
if(args.length<4){
System.out.println("Usage:Cloak-e|-dpasswdinputfileoutputfile");
return;
}
//Getorcreatekey.
Keykey;
KeyGeneratorgenerator=KeyGenerator.getInstance("DES");
generator.init(newSecureRandom(args[1].getBytes()));
key=generator.generateKey();
//Getacipherobject
Ciphercipher=Cipher.getInstance("DES/ECB/PKCS#5");
//Encryptordecrypt
if(args[0].indexOf("e")!=-1)
cipher.init(Cipher.ENCRYPT_MODE,key);
else
cipher.init(Cipher.DECRYPT_MODE,key);
FileInputStreamin=newFileInputStream(args[2]);
FileOutputStreamfileOut=newFileOutputStream(args[3]);
CipherOutputStreamout=newCipherOutputStream(fileOut,cipher);
byte[]buffer=newbyte[kBufferSize];
intlength;
while((length=in.read(buffer))!=-1)
out.write(buffer,0,length);
in.close();
out.close();
}
}
8.a生章cJC(以DSA槔)
滴缓章经常使用在W路上做人身份_J。
a生章的步E:
呼唤getInstance获得一Signaturew
呼唤initSign初始化Signature
呼唤signa生章
JC的步E:
呼唤getInstance获得一Signaturew
呼唤initVerify初始化Signature
呼唤verifyJC
Sample1:a生Private/PublicKey
importjava.security.*;
importjava.security.KeyPairGenerator;
importjava.security.KeyPair;
importjava.io.*;
publicclassKeyPair1{
publicstaticvoidmain(String[]args)
{
try{
KeyPairGeneratorgenKeyPair=KeyPairGenerator.getInstance("DSA");
genKeyPair.initialize(1024,newSecureRandom());
KeyPairkpKey=genKeyPair.genKeyPair();
PrivateKeyprKey=kpKey.getPrivate();
PublicKeypuKey=kpKey.getPublic();
ObjectOutputStreamosPrivate=newObjectOutputStream(newFileOutputStream("D:Private.Key"));
ObjectOutputStreamosPublic=newObjectOutputStream(newFileOutputStream("D:Public.Key"));
osPrivate.writeObject(prKey);
osPublic.writeObject(puKey);
osPrivate.close();
osPublic.close();
}
catch(Exceptione){
System.out.println("Error");
}
}
}
Sample2:a生章cJC
importjava.io.*;
importjava.security.*;
importjava.security.Signature;
importjava.security.cert.*;
publicclassGenSign{
publicstaticvoidmain(String[]args)throwsException{
Stringoptions=args[0];
Stringmessagefile=args[1];
Stringsignaturefile=args[2];
Signaturesignature=Signature.getInstance("DSA");
if(options.indexOf("s")!=-1){
ObjectInputStreamis=newObjectInputStream(newFileInputStream("D:Private.key"));
PrivateKeypriKey=(PrivateKey)is.readObject();
signature.initSign(priKey);
is.close();
}
else{
ObjectInputStreamis=newObjectInputStream(newFileInputStream("D:Public.key"));
PublicKeypubKey=(PublicKey)is.readObject();
signature.initVerify(pubKey);
is.close();
}
FileInputStreamin=newFileInputStream(messagefile);
byte[]buffer=newbyte[8192];
intlength;
while((length=in.read(buffer))!=-1)
signature.update(buffer,0,length);
in.close();
if(options.indexOf("s")!=-1){
FileOutputStreamout=newFileOutputStream(signaturefile);
byte[]raw=signature.sign();
out.write(raw);
out.close();
}
else{
FileInputStreamsigIn=newFileInputStream(signaturefile);
byte[]raw=newbyte[sigIn.available()];
sigIn.read(raw);
sigIn.close();
if(signature.verify(raw))
System.out.println("Thesignatureisgood.");
else
System.out.println("Thesignatureisbad.");
}
}
}
如果你学习的是市场营销,是销售,也许参加大课堂的学习会更合适,因为你的工作能力中有个基础就是搭建自己的人脉, |
|