2012-11-26 7 views
0

개인 키를 사용하여 파일에 서명하는 Java 프로그램을 작성하려고합니다. 이 프로그램은 파일, 비밀 키링 및 암호의 3 가지 인수를 취합니다. 출력은 분리 된 파일 * .bpg에 있어야합니다. 문제는 내 코드를 컴파일하려고 할 때 다음과 같은 오류를 얻을 수 있습니다 :BouncyCastle을 사용하여 Java 서명 파일 - 비밀 키링을 사용하여 파일의 서명을 만듭니다.

PGPPrivateKey pgpPrivKey = 
     key.extractPrivateKey(args[2].toCharArray(), "BC"); 
    PGPSignatureGenerator sGen = new PGPSignatureGenerator(
     key.getPublicKey().getAlgorithm(), PGPUtil.SHA1, "BC"); 
    sGen.initSign(PGPSignature.BINARY_DOCUMENT, pgpPrivKey); 
:

import java.io.*; 
import java.security.*; 
import java.util.Iterator; 

import org.bouncycastle.bcpg.*; 
import org.bouncycastle.jce.provider.BouncyCastleProvider; 
import org.bouncycastle.openpgp.*; 

public class Sign { 
    public static void main(String[] args) throws Exception { 
    Security.addProvider(new BouncyCastleProvider()); 
    FileInputStream keyIn = new FileInputStream(args[1]); 
    FileOutputStream out = new FileOutputStream(args[0] + ".bpg"); 
    InputStream in = PGPUtil.getDecoderStream(keyIn); 
    PGPSecretKeyRingCollection pgpSec = 
           new PGPSecretKeyRingCollection(in); 
    PGPSecretKey key = null; 
    Iterator rIt = pgpSec.getKeyRings(); 
    while (key == null && rIt.hasNext()) { 
     PGPSecretKeyRing kRing = (PGPSecretKeyRing)rIt.next(); 
     Iterator kIt = kRing.getSecretKeys(); 
     while (key == null && kIt.hasNext()) { 
     PGPSecretKey k = (PGPSecretKey)kIt.next(); 
     if (k.isSigningKey()) { key = k; } 
     } 
    } 
    if (key == null) { 
     throw new IllegalArgumentException("Can't find key"); 
    } 
    PGPPrivateKey pgpPrivKey = 
     key.extractPrivateKey(args[2].toCharArray(), "BC"); 
    PGPSignatureGenerator sGen = new PGPSignatureGenerator(
     key.getPublicKey().getAlgorithm(), PGPUtil.SHA1, "BC"); 
    sGen.initSign(PGPSignature.BINARY_DOCUMENT, pgpPrivKey); 
    PGPCompressedDataGenerator cGen = new PGPCompressedDataGenerator(
     PGPCompressedDataGenerator.ZLIB); 
    BCPGOutputStream bOut = new BCPGOutputStream(cGen.open(out)); 
    FileInputStream fIn = new FileInputStream(args[0]); 
    int ch = 0; 
    while ((ch = fIn.read()) >= 0) { sGen.update((byte)ch); } 
    sGen.generate().encode(bOut); 
    cGen.close(); 
    out.close(); 
    } 
} 

오류는 다음과 같은 라인에서 오는 다음과 같이

C:\CNS3\BCastle>javac Sign.java 
Note: Sign.java uses or overrides a deprecated API. 
Note: Recompile with -Xlint:deprecation for details. 

내 코드입니다

누구든지이 문제를 해결할 수있는 방법에 대해 제안 해 주시겠습니까? 고마워요!

답변

1

먼저 언급 된 메시지는 오류가 아닙니다. 그들은 경고입니다. 프로그램은 정상적으로 실행되지만 사용하는 메소드 나 클래스는 사용되지 않음으로 표시됩니다. 그것은 당신이 여전히 그들을 사용할 수 있음을 의미하지만, 탄력성의 장래의 버젼에서는 이러한 메소드 나 클래스가 제거 될 수 있기 때문에 그렇게하지 않는 것이 좋습니다.

이 클래스의 최신 API 문서를 참조하십시오. 사용되지 않는 메소드/클래스 대신 사용할 정보가 있어야합니다.

+0

답장을 보내 주셔서 감사합니다. 나는 정말 쓸모없는 메소드와 혼동을 겪었고 코드가 작동한다는 것을 깨닫지 못했습니다. @ 대니얼 감사합니다! –