PDJavaÍg@\iJCEjɂÍ
PDP@Tv
@JavaɂÍ̉s܂B
@JDK5.0ɂ́AJCEiJava Íg@\j܂܂ĂA̋@\𗘗pƁAʌɂ
ÍJɂÍ@\ł܂B 

PDQ@ʌi閧jł̈Í
@Javał́AʌƂAu閧viSecret KeyjƂ܂B{ł́A
̕\ɂĐ܂B

܂A̕\ɏ]܂ƁAJ̎Lɑ閧̕\ƍ܂̂ŁA
uJvƁuLvƂ\ɓꂵABɂȂȂ悤ɂ܂B

閧ɂÍł́ApX[hx[XÍT|[gĂ܂̂łꂼ̕@
܂B 

PDQDP@Íƕ@iɂj
@Í閧ŐĈÍR[hȉɎ܂BÍƕł́A
KeyGeneratorNXgĔ閧𐶐ACipherNXgĈÍƕs܂B
@Ő@ŗpł̈Í̃ASÝAȉ̂ƂłB

`dr 
ARCFOUR/RC4 
Blowfish 
DES 
DESede 
RC2 
̈ÍASÝACipher̐̍ۂɎw肵܂B
ȉɈÍƕ̃R[hL܂B
 
/*
 * Íƕ
 */
import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.IvParameterSpec;


public class Encrypt01 {

    public static void main(String[] args) {

        try {

            // Í
            KeyGenerator kg = KeyGenerator.getInstance("DES");
            Key key = kg.generateKey();
            Cipher c = Cipher.getInstance("DES/CBC/PKCS5Padding");
            c.init(Cipher.ENCRYPT_MODE, key);
            byte input[] = "To be encrypted data.".getBytes();
            byte encrypted[] = c.doFinal(input); // ňÍ

            // 畜
            byte iv[] = c.getIV();

            IvParameterSpec dps = new IvParameterSpec(iv);
            c.init(Cipher.DECRYPT_MODE, key, dps);
            byte output[] = c.doFinal(encrypted);

            // \
            System.out.println("The string was \"");
            System.out.println(new String(output) + "\"");

        } catch (Exception e) {

            e.printStackTrace();

        }
    }
}
 
Íł́A𐶐Ǎgăf[^iNAeLXgƂ܂jÍ܂B
̍ۂ́AgĈÍꂽf[^𕜍܂B

̐
KeyGeneratorNXgiKeyNXj𐶐܂BKeyGenaratorNX̃CX^X́A
R[ĥ悤getInstance( )𗘗p܂B
̍ۂɐɎASYw肵܂BASY͑召ʂ܂B
w肵ASYp̌́AgenerateKey( )Ő܂B̃\bhR[邲
ɐVȌi_Ɂj܂B

Í
Íł́ACipherNXg܂̂ŁA܂CX^X𐶐܂BR[hɂ悤
getInstance( )\bh𗘗p܂B̂ƂAɂ͈Í̃ASYialgorithmj
ƂƂɃ[himodejƃpfBOipaddingjȉ̌`Ŏw肵܂B
@@@algorithm/mode/padding
[hуpfBO͏ȗł܂̂
@@@algorithm
Ǝw肵Ă܂܂Bȗꂽꍇ́A̒lKp܂BSunJCȄꍇ́A
DESADES-EDEABlowfishÍ̃ftHg[h ECBŁApfBO PKCS5PaddingłB
̂߁AgDES/ECB/PKCS5PaddinghƁgDESh͓łB

ÍASYƂāiŁjwł̂́Aȉ̂ƂłAASYɂ
̓IȎ@قȂꍇ܂̂ŒӂĂB

AES: Advanced Encryption Standard ƂāANIST ɂ FIPS htgɎw肳ꂽB 
ARCFOUR/RC4: Ron Rivest JXg[ÍB 
Blowfish: Bruce Schneier ̐݌vɂubNÍ 
DES: f[^ÍKi (FIPS PUB 46-2 Œ`) 
DESede: gv DES Í (DES-EDE) 
ECIES (Elliptic Curve Integrated Encryption Scheme) 
PBEWith<digest>And<encryption> ܂ PBEWith<prf>And<encryption>: pX[hx[ẌÍASY (PKCS #5) ŁAw肳ꂽbZ[W_CWFXg (<digest>) ܂͋[Í֐ (<prf>)AÍASY (<encryption>) gpBقǗpĐ܂B 
RC2ARC4A RC5: RSA Data Security, Inc  Ron Rivest ɂJꂽσL[TCYÍASY 
RSA: PKCS #1 Œ`Ă RSA ÍASY 
ȂA[hуpfBO͈ȉ̂悤Ȓlwł܂B
[h́A 
NONE: [hȂ 
CBC: FIPS PUB 81 Œ`ꂽ Cipher Block Chaining Mode 
CFB: FIPS PUB 81 Œ`ꂽ Cipher Feedback Mode 
ECB: č National Institute of Standards and Technology (NIST)  Federal Information Processing Standard (FIPS) PUB 81uDES Modes of OperationvŒ`ꂽ Electronic Codebook Mode (1980 N 12 ) 
OFB: FIPS PUB 81 Œ`ꂽ Output Feedback Mode 
PCBC: Kerberos o[W 4 Œ`ꂽ Propagating Cipher Block Chaining 
pfBÓA 
ISO10126Padding: ̃ubNÍppfBÓAW3C ́uXML Encryption Syntax and ProcessingvhLgɋLڂĂB 
NoPadding: pfBOȂ 
OAEPWith<digest>And<mgf>Padding: PKCS #1 ɒ`Ă Optimal Asymmetric Encryption Padding XL[}B 
PKCS5Padding: uPKCS #5: Password-Based Encryption Standardvo[W 1.5 (RSA LaboratoriesA1993 N 11 ) ŋK肳ꂽpfBO 
SSL3Padding: SSL Protocol o[W 3.0 ̃ZNV 5.2.3.2 (CBC ubNÍ) ŋK肳ꂽpfBO 
ȂARʂň͂܂ꂽڂ́Ȃ̖OŒuv[Xz_łB

CX^X𐶐́A܂Binit( )\bhgAÍiENCRYPT_MODEj́AiDECRYPT_MODEj̎wƂƂɐ^܂B

Í̎{
ꂽ Cipher gĈÍ{܂B
oCgf[^Ƃ Cipher  doFinal( )\bhɗ^ƁAÍꂽf[^󂯎邱Ƃł܂B

̏
Íꂽf[^𕜍Ƃ́AÍf[^Ƃ̈ÍɗpKvɂȂ܂B́AÍ̍ۂɐ̂̂܂ܗp܂B
܂AÍASY DESADES-EDEABlowfishiA[hCBCACFBAOFBAPCBĈƂj̏ꍇ́AASYp[^w肵Ȃ΂Ȃ܂BASYp[^́ACipher擾܂B
܂AꂽCipher珉xNggetIV( )\bhŎoA̒lɂăASYp[^擾܂BiȉQƁj

    byte iv[] = c.getIV();
    IvParameterSpec dps = new IvParameterSpec(iv);
̃CX^Xg Cipher ܂BiȉQƁj

    c.init(Cipher.DECRYPT_MODE, key, dps);
 Cipher  doFinal( )\bhgĕꂽf[^擾܂B

̕@ł́AÍꂽf[^̂قÍ̌f[^𕜍鑤ɓnȂ΂Ȃ܂BÍ̌pX[ĥ悤Ɏwł΁ApӂɈÍƕ{邱Ƃł܂Bł́A̕@L܂B 
