< Browse > Home / 작업 / Blog article: PHP와 .Net 간 DES3 통신

| Mobile | RSS

PHP와 .Net 간 DES3 통신

June 16th, 2008 | No Comments | Posted in 작업

모 회사의 연동 작업을 하면서 DES3를 사용하게 되었다. 웹을 찾아보아도 PHP와 .Net 간에 CFB 방식의 DES3 예제가 없어서 고생을 좀 했다.

대부분의 PHP 웹사이트가 그러하듯이 내부 인코딩은 euc-kr(또는 KSC5601)이고, .Net은 내부적으로 Unicode를 사용함으로 인해 발생하는 문제점들까지 고려하여 처리되었다.

using System;
using System.Security.Cryptography;
using System.Text;

public class Crypto
{
	protected static readonly byte[] KeyDES3 = Convert.FromBase64String(ConfigUtil.GetValue("CipherKey"));
	protected static readonly byte[] IVDES3 = Convert.FromBase64String(ConfigUtil.GetValue("CipherIV"));

	/// [summary] DES3(CFB모드)로 암호화된 문자열을 복호화 한다.
	/// [value] 암호화된 문자열
	/// [returns] 복호화된 문자열
	/// [remarks] 전달되는 문자열은 KSC5601로 된 문자열을 DES3(CFB모드)로 암호화 한 뒤 BASE64로 인코딩 되어 있다.
	public static string DecryptDES3(string value)
	{
		// Make DES3 Provider
		TripleDESCryptoServiceProvider oDes3Provider = new TripleDESCryptoServiceProvider();
		oDes3Provider.Mode = CipherMode.CFB;
		oDes3Provider.Key = KeyDES3;
		oDes3Provider.IV = IVDES3;

		// BASE64 Decoding
		byte[] arrBase64 = Convert.FromBase64String(value);

		// Decode DES3
		byte[] arrDES3 = oDes3Provider.CreateDecryptor().TransformFinalBlock(arrBase64, 0, arrBase64.Length);

		// Convert bytes to string as KSC5601
		return Encoding.GetEncoding("ksc5601").GetString(arrDES3); // 인코딩에 유의
	}

	/// [summary] 전달받은 문자열을 DES3(CFB모드)로 암호화 한다.
	/// [value] 암호화 할 문자열
	/// [returns]암호화 된 문자열
	/// [remarks] 입력되는 문자열을 KSC5601로 변환한 뒤, DES3(CFB모드)로 암호화 하고, 이를 BASE64로 인코딩 한다.
	public static string EncryptDES3(string value)
	{
		// Make DES3 Provider
		TripleDESCryptoServiceProvider oDes3Provider = new TripleDESCryptoServiceProvider();
		oDes3Provider.Mode = CipherMode.CFB;
		oDes3Provider.Key = KeyDES3;
		oDes3Provider.IV = IVDES3;

		// Convert string to bytes as KSC5601
		byte[] arrValue = Encoding.GetEncoding("ksc5601").GetBytes(value);

		// Encode DES3
		byte[] arrDES3 = oDes3Provider.CreateEncryptor().TransformFinalBlock(arrValue, 0, arrValue.Length);

		// BASE64 Encoding
		return Convert.ToBase64String(arrDES3);
	}
}

Popularity: 32% [?]

Leave a Reply 4 views, 1 so far today |
  • No Related Post

Leave a Reply

Converse Logo2한지민박대현장지아Couple윤은혜Anne Hathaway오림이 여자친구오선희David Beckham