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

