C# – ComboBox 데이터바인딩

C# 콤보박스에 데이터를 바인딩하기
var list = new BindingList<KeyValuePair<int, string>>();

list.Add(new KeyValuePair<string, string>(0, "Select Color"));
list.Add(new KeyValuePair<string, string>(1, "Red"));
list.Add(new KeyValuePair<string, string>(2, "Blue"));
list.Add(new KeyValuePair<string, string>(3, "White"));
list.Add(new KeyValuePair<string, string>(4, "Black"));
list.Add(new KeyValuePair<string, string>(5, "Green"));

cbColor.DataSource = list;
cbColor.ValueMember = "Key";
cbColor.DisplayMember = "Value";
cbColor.SelectedIndex = 0;
콤보박스 선택하기
cbColor.SelectedValue = 3;
cbColor.Text = "Blue";
cbColor.SelectedValue = cbColor.FindString("Red");

윈도우 방화벽 규칙 추가/삭제 – C#

방화벽 관련해서 참고는 구글링 웹문서들과 mdsn
https://msdn.microsoft.com/ko-kr/library/windows/desktop/aa365344(v=vs.85).aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/ff956124(v=vs.85).aspx

c#에서 방화벽에 규칙을 추가하는 방법을 찾던중에
쉽게 할 수 있는 방법이 있어 해당 코드를 안내합니다.

참조추가

FirewallAPI.dll 파일을 참조로 추가합니다.

규칙추가

INetFwRule firewallRule = (INetFwRule)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule"));
 firewallRule.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW;
 firewallRule.Description = "방화벽 규칙에 대한 설명을 입력합니다";
 firewallRule.Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN;
 firewallRule.ApplicationName = Application.ExecutablePath + @"\app.exe";
 firewallRule.InterfaceTypes = "All";
 firewallRule.Name = "Rule name"; // 방화벽 규칙을 구분하는 이름, 삭제시에도 사용됩니다
 firewallRule.Enabled = true;
 INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
 firewallPolicy.Rules.Add(firewallRule);

규칙삭제

INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
 firewallPolicy.Rules.Remove("Rule name");

기존에 추가된 방화벽 규칙을 확인

INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
 foreach(INetFwRule rule in firewallPolicy.Rules)
 {
 Console.WriteLine(rule.Name);
 }

C#, PHP – RIJNDAEL 256bit 암/복호화

C#과 php간에 데이터를 주고 받아야 하는데
평문으로 통신하기에 무리가 있던 도중
기존에 사용하던 php 암호화 라이브러리와 연동되는 c# 코드를 발견~
살짝 수정해서 사용하는데 무리가 없음

기본은 128bit지만 256bit로 변경했음
php의 경우 블록에서 남는 부분을 zero로 채워넣기 때문에
c#에서 PaddingMode.Zeros를 설정해야 정상적으로 동작합니다.

Encryption.cs

[csharp]
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;

namespace TestClass
{
class Encryption
{
private static byte[] rijnKey = Encoding.UTF8.GetBytes("abcdefg_abcdefg_abcdefg_abcdefg_");
private static byte[] rijnIV = Encoding.UTF8.GetBytes("abcdefg_abcdefg_abcdefg_abcdefg_");

public static String EncryptIt(String s)
{
String result;
RijndaelManaged rijn = new RijndaelManaged();
rijn.Mode = CipherMode.CBC;
rijn.Padding = PaddingMode.Zeros; // php와의 연동에서 꼭 확인
rijn.BlockSize = 256;

using (MemoryStream msEncrypt = new MemoryStream())
{
using (ICryptoTransform encryptor = rijn.CreateEncryptor(rijnKey, rijnIV))
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
swEncrypt.Write(s);
}
}
}
result = Convert.ToBase64String(msEncrypt.ToArray());
}
rijn.Clear();

result = Base64UrlEncode(result);

return result;
}

public static String DecryptIt(String s)
{
String result;
RijndaelManaged rijn = new RijndaelManaged();
rijn.Mode = CipherMode.CBC;
rijn.Padding = PaddingMode.Zeros;
rijn.BlockSize = 256;

s = Base64UrlDecode(s);

using (MemoryStream msDecrypt = new MemoryStream(Convert.FromBase64String(s)))
{
using (ICryptoTransform decryptor = rijn.CreateDecryptor(rijnKey, rijnIV))
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (StreamReader swDecrypt = new StreamReader(csDecrypt))
{
result = swDecrypt.ReadToEnd();
}
}
}
}
rijn.Clear();

return result;
}

public static string Base64UrlEncode(string arg)
{
arg = arg.Split(‘=’)[0]; // Remove any trailing ‘=’s
arg = arg.Replace(‘+’, ‘-‘); // 62nd char of encoding
arg = arg.Replace(‘/’, ‘_’); // 63rd char of encoding
return arg;
}

public static string Base64UrlDecode(string arg)
{
string s = arg;
s = s.Replace(‘-‘, ‘+’); // 62nd char of encoding
s = s.Replace(‘_’, ‘/’); // 63rd char of encoding
switch (s.Length % 4) // Pad with trailing ‘=’s
{
case 0: break; // No pad chars in this case
case 2: s += "=="; break; // Two pad chars
case 3: s += "="; break; // One pad char
default:
throw new System.Exception("Illegal base64url string!");
}
return s;
}
}
}

[/csharp]

test.php

[php]
//Encryption function
function encryption($encrypt, $key, $iv)
{
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_256, ”, MCRYPT_MODE_CBC, ”);
mcrypt_generic_init($td, $key, $iv);
$encrypted = mcrypt_generic($td, $encrypt);
$encode = base64_encode($encrypted);
$encode = base64safeEncode($encode);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);

return $encode;
}

//Decryption function
function decryption($decrypt, $key, $iv)
{
$decoded = base64safeDecode($decrypt);
$decoded = base64_decode($decoded);
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_256, ”, MCRYPT_MODE_CBC, ”);
mcrypt_generic_init($td, $key, $iv);
$decrypted = mdecrypt_generic($td, $decoded);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);

return trim($decrypted);
}

function base64safeEncode($data) {
$data = str_replace("=", "", $data);
$data = str_replace("+", "-", $data);
$data = str_replace("/", "_", $data);
return $data;
}

function base64safeDecode($data) {
$data = str_replace("-", "+", $data);
$data = str_replace("_", "/", $data);

switch (strlen($data) % 4) {
case 0: break;
case 2: $data .= "=="; break;
case 3: $data .= "="; break;
}

return $data;
}

$key = "abcdefg_abcdefg_abcdefg_abcdefg_";
$iv = "abcdefg_abcdefg_abcdefg_abcdefg_";

echo encryption("Hello world!", $key, $iv);
echo decryption("1ERpu8RaiyMqsXdjhCEu9IVMyQlz/A3fBR6vGbNxaVs=", $key, $iv);
[/php]

C#.net – 인터넷 쿠키, 히스토리, 캐시 지우기

c#에서 인터넷 쿠키, 히스토리, 캐시를 지워야 할 경우 사용한다.

string[] strFiles1 = Directory.GetFiles(Environment.GetFolderPath(
Environment.SpecialFolder.History), "*", SearchOption.AllDirectories);
string[] strFiles2 = Directory.GetFiles(Environment.GetFolderPath(
Environment.SpecialFolder.Cookies), "*.txt", SearchOption.AllDirectories);
string[] strFiles3 = Directory.GetFiles(Environment.GetFolderPath(
Environment.SpecialFolder.InternetCache), "*", SearchOption.AllDirectories);


FileInfo fileDel = null;


foreach (string tmp in strFiles1)
{
    fileDel = new FileInfo(tmp);
    if (fileDel.Exists)
    {
        fileDel.Delete();
    }
}

GetRequestStream() 사용시 지연문제

WebRequest req = WebRequest.Create(URL);
req.Method = “POST”;
req.ContentType = “application/x-www-form-urlencoded”;
byte[] byteArray = Encoding.UTF8.GetBytes(data);
req.ContentLength = byteArray.Length;

Stream ds = req.GetRequestStream();
ds.Write(byteArray, 0, byteArray.Length);
ds.Close();

req.GetRequestStrream(); 사용시 이상하게 딜레이가 생기는데,
구글의 도움을 얻어보니,
req.Proxy = null;
한줄 추가해주니 딜레이가 사라졌다.

 

Despite the fact that no proxy is configured on the machine, and IE/WinINet
are configured to never use a proxy, with automatic detection disabled,
HttpWebRequest was apparently trying to detect a proxy.

 

yessign 코드서명용 인증서 무료발급 이벤트

금융결제원에서 8월 29일부터 국내 최초로 KISA인증서 기반의 국산 코드서명용 인증서를
발급합니다. 서비스 오픈을 기념하여 코드서명용 인증서 무료발급이벤트를 실시하오니 아래를
참조하시어 무료발급의 혜택을 누려보세요!


※ 코드서명용 인증서란?
   응용프로그램 배포 시 배포자를 확인할 수 있도록 해당 프로그램에 전자서명하는 인증서







● 서비스 오픈일시 : 2008.8.29

● 무료발급기간 : 서비스 본격실시(11월중)전 까지
   ※ 이벤트 종료 후 정상발급가 : 15만원(1년형 인증서 기준, 부가세 제외)

● 발급방법 : ① 홈페이지(https://www.yessign.or.kr/ssl) 회원가입 후
                     발급신청(신청 시 무통장입금 선택)
                 ② 구비서류 송부(사업자등록증 및 전화번호 영수증)
                 ③ 담당자 통화 후 발급완료


※ 참고 : 무료로 발급되는 인증서는 시점확인기능을 포함하고 있지 않음(추후 제공예정)
※ 관련 문의 : 02-531-3323




yessign 코드서명용 인증서의 많은 이용을 부탁드립니다. 감사합니다.

VB.Net 2003에서 웹CGI script로 multipart/form-data posting하기

안녕하세요.


VB .NET 2003 windows application에서 특정 웹의 CGI script로 데이타를 보낸 후 그 결과를 받아오는 방법을 알고 싶습니다.


http://pubchem.ncbi.nlm.nih.gov/search/PreQSrv.cgi 로 query를 보내는 것인데,


솔직히 어떻게 해야 될지 잘 모르겠습니다.


http://pubchem.ncbi.nlm.nih.gov/search/ 에 가면 구조 검색 기능이 있는데,


여기에 SMILES 에 예를 들어 ‘CCCCCC’를 넣고 ‘Search’버튼을 누르면,


해당 검색 queyr를 위의 PreQSrv.cgi로 보내게 됩니다.


POST method를 사용하는데,


어떤 식으로 VB .Net에서 구현을 해야될지 모르겠습니다. -_-;;


여러군데 찾아다녀서 아래와 같은 코드를 얻었는데, 계속해서 에러만 납니다.


(Console application 용으로 간단하게 만든것입니다.)


postData가 잘못된 것 같기도 하고 도무지 모르겠습니다. -_-.


고수님들의 조언 꼭 부탁드립니다. 미리 감사드립니다.


——————————————————————————————————————–


Imports System


Imports System.IO


Imports System.Net


Imports System.Text


Module Module1


    Sub Main()


        ‘ Create a request using a URL that can receive a post.


        Dim request As WebRequest = WebRequest.Create(“http://pubchem.ncbi.nlm.nih.gov/search/PreQSrv.cgi”)


        ‘ Set the Method property of the request to POST.


        request.Method = “POST”


        ‘ Create POST data and convert it to a byte array.


        Dim postData As String = “simpledata_search=CCCCCC&mode=simplequery&check=remote&execution=remote&queue=ssquery&output=entrez”


        Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)


        ‘ Set the ContentType property of the WebRequest.


        request.ContentType = “multipart/form-data”


        ‘ Set the ContentLength property of the WebRequest.


        request.ContentLength = byteArray.Length


        ‘ Get the request stream.


        Dim dataStream As Stream = request.GetRequestStream()


        ‘ Write the data to the request stream.


        dataStream.Write(byteArray, 0, byteArray.Length)


        ‘ Close the Stream object.


        dataStream.Close()


        ‘ Get the response.


        Dim response As WebResponse = request.GetResponse()


        ‘ Display the status.


        Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)


        ‘ Get the stream containing content returned by the server.


        dataStream = response.GetResponseStream()


        ‘ Open the stream using a StreamReader for easy access.


        Dim reader As New StreamReader(dataStream)


        ‘ Read the content.


        Dim responseFromServer As String = reader.ReadToEnd()


        ‘ Display the content.


        Console.WriteLine(responseFromServer)


        ‘ Clean up the streams.


        reader.Close()


        dataStream.Close()


        response.Close()


    End Sub


End Module


————————————————————————————————————-