Hei Guys,RSA는 키보다 긴 문자열을 암호화합니다.
저는 JS와 공개 키로 문자열을 암호화하고 있습니다. JSBN 코드를 사용하지만 BigInt를 만드는 데 문제가 있습니다.
RSA.js을 수행합니다
// Copyright (c) 2005 Tom Wu
var m = pkcs1pad2(text,(this.n.bitLength()+7)>>3); // getting the Bigint
if(m == null) return null; // nullcheck
var c = this.doPublic(m); // encrypting the BigInt
문제는 "pkcs1pad2"입니다. 이 함수는 텍스트의 길이가 더 길면 키의 BitLength를 확인합니다. 그렇다면 BigInt를 생성하고 리턴하십시오.
// Copyright (c) 2005 Tom Wu
if(n < s.length + 11) { // TODO: fix for utf-8
alert("Message too long for RSA");
return null;
}
var ba = new Array();
var i = s.length - 1;
while(i >= 0 && n > 0) {
var c = s.charCodeAt(i--);
if(c < 128) { // encode using utf-8
ba[--n] = c;
} else if((c > 127) && (c < 2048)) {
ba[--n] = (c & 63) | 128;
ba[--n] = (c >> 6) | 192;
} else {
ba[--n] = (c & 63) | 128;
ba[--n] = ((c >> 6) & 63) | 128;
ba[--n] = (c >> 12) | 224;
}
}
ba[--n] = 0;
var rng = new SecureRandom();
var x = new Array();
while(n > 2) { // random non-zero pad
x[0] = 0;
while(x[0] == 0) rng.nextBytes(x);
ba[--n] = x[0];
}
ba[--n] = 2;
ba[--n] = 0;
return new BigInteger(ba);
작성자가 "// TODO : fix for utf-8"로 무엇을 의미하는지 알 수 없습니다. 아무도 이것을 설명 할 수 있습니까? &/답변을 드릴까요?
입력 데이터에 패딩을 수행하는 것은 RSA의 일부가 아닙니다. 나는 pkcs1pad2 함수가 내가 잘못하지 않았다면 crypted 파일에 공개 키를 추가한다고 생각한다. – fathyb
@fathyb 나는 그가 정확히 무엇을 하려는지 아니,이 함수는 bigint를 생성하는지 정확히 알지 못한다. "doPublic"이 암호화 된 바이트 배열을 반환하기 때문에 "// PKCS # 1 (type 2, random) 입력 문자열을 n 바이트까지 채우고 bigint를 반환합니다." – SEUH