RSA를 이용하여 아이디와 패스워드를 암호화 하려고 하는데 클라이언트(javascript)에서 공개키로 암호화를 하고 서버(C#)에서 개인키로 복호화를 하는데 Bad Data 또는 포맷 예외가 발생하여 관련 내용을 검색해보았습니다.
복호화가 실패하는 이유는 1. 둘 언어간에 byte order가 다르고 2. padding이 다르기 때문입니다.
위의 사이트에서는 해결 방법으로 Jocys JS.NET 라이브러리를 알려줍니다.
해당 라이브러리는 마치 C# 구문과 동일하게 javascript로 구현을 해놓았고 네임스페이스, 클래스명까지 동일하게 구현을 해놓았습니다. 우와~~~
http://www.jocys.com/Common/JsClasses/Documents/
// Create HMAC-MD5 Algorithm.
var
hmac =
new
System.Security.Cryptography.HMACMD5();
// Convert string to array of bytes.
var
key = System.Text.Encoding.UTF8.GetBytes(
"test key"
);
var
data = System.Text.Encoding.UTF8.GetBytes(
"test data"
);
// Compute hash.
var
hashBytes = hmac.ComputeHash(key, data);
// Convert to HEX string.
var
hex = System.BitConverter.ToString(hashBytes);
// Convert to GUID so you can store it inside database.
var
guid =
new
System.Guid(hashBytes);
C#구문과 완벽하게 일치합니다.
실제로 RSA를 사용하여 암호화를 하니 발생하던 에러도 당연히! 사라졌습니다. 엄지척 ^^