PHP와 .Net 간 DES3 통신
모 회사의 연동 작업을 하면서 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% [?]











