저는 java의 로컬 저장소에서 인증서를 통해 파일의 암호를 해독합니다. 그러나 테이블을 포함하는 워드 프로세싱 파일의 경우 파일은 실제와 동일하게 유지되지 않습니다. 나는 정상적인 파일 입력/출력 스트림을 사용하고있다. 도움이되면 도움이 될 것입니다.테이블 및 구조체가 포함 된 텍스트 암호화
public int encryptFileWithpubkey(String filepath,PublicKey pubkey){
int retval=0;
FileInputStream fis = null;
File file=null;
final String location = filepath;
PublicKey pubKey= pubkey;
try{
try {
fis = AccessController.doPrivileged(
new PrivilegedExceptionAction<FileInputStream>() {
public FileInputStream run() throws FileNotFoundException {
return new FileInputStream(location);
}
});
} catch (PrivilegedActionException e) {
throw (FileNotFoundException) e.getException();
}
InputStream is = fis;
//long length = file.length();
byte[] bytes = new byte[fis.available()];
int offset = 0;
int numRead = 0;
while (offset < bytes.length
&& (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
offset += numRead;
}
is.close();
file=null;
String encString="";
int iFixedLen=110;
if(bytes.length>=iFixedLen){
int noOfBlocks=(int)Math.ceil((bytes.length/110.0));
// System.out.println("Noof blocks :"+noOfBlocks);
for(int i=0;i<noOfBlocks;i++){
byte[] tempStr=null;
if(i==noOfBlocks-1){
//System.out.println("Last block");
tempStr=new byte[(bytes.length-(i*iFixedLen))];
System.arraycopy(bytes, (i*iFixedLen), tempStr, 0,(bytes.length-(i*iFixedLen)));
}
else
{
//System.out.println("i : "+i);
tempStr=new byte[iFixedLen];
//tempStr=new byte[iFixedLen];
System.arraycopy(bytes, (i*iFixedLen), tempStr, 0,iFixedLen);
//tempStr=plainText.substring(0,110) ;
//plainText=plainText.substring(110);
}
encString+= encryptBytes(tempStr,pubKey)+" ";
}
encString=encString.substring(0,encString.length()-1);
retval=noOfBlocks;
}else{
encString=encryptBytes(bytes,pubKey);
retval=1;
}
FileOutputStream fos = null;
try {
fos = AccessController.doPrivileged(
new PrivilegedExceptionAction<FileOutputStream>() {
public FileOutputStream run() throws FileNotFoundException {
return new FileOutputStream(location);
}
});
} catch (PrivilegedActionException e) {
throw (FileNotFoundException) e.getException();
}
fos.write(encString.getBytes());
fos.close();
}catch(Exception e){
e.printStackTrace();
return 0;
}
return retval;
}
encryptBytes 기능 followes : 당신은 여기 책에 거의 모든 실수를 한
public String encryptBytes(byte[] rawData,PublicKey pubkey){
String retval=null;
try{
byte[] rawByteData=rawData;
Cipher cp=Cipher.getInstance("RSA/ECB/PKCS1PADDING");
cp.init(Cipher.ENCRYPT_MODE,pubkey);
byte[] getDat=cp.doFinal(rawByteData);
retval=java.util.Base64.getEncoder().encodeToString(getDat);
}catch(Exception e)
{
e.printStackTrace();
}
return retval;
}
코드 어딘가에 버그가 있습니다. 이것은 그것을 보지 않고도 말할 수 있습니다. – Henry
@Henry 간단한 텍스트 내용에는 문제가 없지만 다이어그램과 테이블의 경우 제대로 작동하지 않습니다. –
다이어그램과 테이블을 암호화 할 때 코드에 버그가 있습니다. 어떤 다른 종류의 대답이 예상 될 수 있습니까? – EJP