RSA를 이용하여 아이디와 패스워드를 암호화 하려고 하는데 클라이언트(javascript)에서 공개키로 암호화를 하고 서버(C#)에서 개인키로 복호화를 하는데 Bad Data 또는 포맷 예외가 발생하여 관련 내용을 검색해보았습니다.


http://stackoverflow.com/questions/19418021/rsa-encrypt-password-in-javascript-but-failed-to-decrypt-that-in-c-sharp


복호화가 실패하는 이유는 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를 사용하여 암호화를 하니 발생하던 에러도 당연히! 사라졌습니다. 엄지척 ^^

Posted by resisa