본문 바로가기

프로그래밍/C#25

자바스크립트 CryptoJS.HmacSHA256를 C# HMACSHA256 클래스 대응 자바스크립트 함수 var hash = CryptoJS.HmacSHA256(message, secretKey); var signature = CryptoJS.enc.Hex.stringify(hash); C# 대응 함수 private string GetMacSha256() { string strKey = "key_문자열"; byte[] bytesKey = Encoding.ASCII.GetBytes(strKey); string message = "변환할 메시지"; HMACSHA256 hmac = new HMACSHA256(bytesKey); byte[] data = Encoding.ASCII.GetBytes(message); MemoryStream stream = new MemoryStream(data); s.. 2021. 10. 28.
C# WEB URL로 PDF 다운받아 Base64문자열 변환하기 PDF 파일 다운받아서 Base64 문자열로 변환하기 string pdfUrl = "URL_TO_PDF"; using(WebClient client = new WebClient()) { var bytes = client.DownloadData(pdfUrl); string base64String = Convert.ToBase64String(bytes); } stackoverflow.com/a/44560717 2021. 2. 17.
C# XML 내용 안전하게 읽기 XML 파일을 로드 시도하는 부분에 보안 이슈가 있어서 처리한 내용 XML 파일을 검증 없이 로드하다가 공격 코드에 노출될 수 있어서 처리한 함수 public static Stream GenerateStreamFromString(string s) { MemoryStream stream = new MemoryStream(); StreamWriter writer = new StreamWriter(stream); writer.Write(s); writer.Flush(); stream.Position = 0; return stream; } public static XmlDocument XmlLoadIgnoreDTD(string xml) { Stream stream = GenerateStreamFromString.. 2018. 2. 28.
C# SecureString 클래스를 이용한 문자열 보호 비밀번호를 일반 문자열에 담고 처리하다가 발생할 수 있는 보안 이슈에 대응하기 위해 SecureString을 사용함 아래와 같은 문제가 발생할 수 있음 문자열에 노출되지 않아야 할 정보를 담고 처리하지 말아야 한다. 메모리를 읽을 수 있으면 그대로 노출된다.메모리에서 디스크로 교체되면 암호화 되지 않은 내용이 스왑 파일에 남음가비지에 의해 제거되지 않고 남은 상황에서 응용프로그램이 비정상 종료될 경우 메모리 덤프에 민감 정보가 포함될 수 있음 //String -> SecureStringpublic static SecureString ConvertStringToSecureString(string str){ var secureStr = new SecureString(); if (str.Length > 0) .. 2018. 2. 27.
C# 파일명 유효성 체크 보안성 심사하다가 파일명과 관련한 사항이 검토되어 처리한 소스임 파일명으로 사용할 수 없는 문자나 특수문자를 걸러내는 내용임 public static string ReplaceFileName(string s){Regex regex = new Regex(string.Format("[{0}]", Regex.Escape(new string(Path.GetInvalidFileNameChars())))); s = regex.Replace(s, "");return s;} MSDN에 있는 내용임. 2018. 2. 26.
C# 파일 경로 유효성 체크 파일 경로 체크 시 보안성 관련 문제를 해결하다가 찾은 소스경로로 사용할 수 없는 문자가 있는지 확인해서 빈 문자열로 바꿔줌 public string ReplacePath(string s){Regex regex = new Regex(string.Format("{0}", Regex.Escape(new string(Path.GetInvalidPathChars())))); s = regex.Replace(s, "");return s;} MSDN 권고 소스임.. 2018. 2. 26.
C# 싱글톤 패턴 예제 모음 멀티스레드에 안전하지 않은 싱글톤 패턴 using System; public class Singleton{ private static Singleton instance; private Singleton() {} public static Singleton Instance { get { if (instance == null) { instance = new Singleton(); } return instance; } }} 멀티스레드에 안전한 싱글톤 패턴 public sealed class Singleton{ private static Singleton instance = null; private static readonly object padlock = new object(); Singleton() { } p.. 2018. 2. 21.
C# DataGridView 에서 선택된 DataRow 꺼내기 할때마다 찾아야 해서 기록용으로 남겨둠 제발 좀 잊지 말자 DataRow r = (this.datagridview1.CurrentRow.DataBoundItem as DataRowView).Row; 잘 기억할 것!!! 2018. 1. 11.
C# 일정 범위 내에 IP 체크하기 클라이언트 IP를 일정 범위 내의 IP안에 있는지 확인하는 함수이다. string ip_network = "192.168.0.1:192.168.0.55,10.2.10.11:10.2.10.15"; bool b = checkIpNetwork(ip_network); private bool checkIpNetwork(string ip_network){ if (ip_network == "") return true; string[] ipArray = ip_network.Split(','); foreach (string strIP in ipArray) { IPAddress startIP = null; IPAddress endIP = null; IPAddress loginIP = null; string[] ips = .. 2017. 11. 9.
C# WebBrowser 키이벤트 엔터키 막기 웹브라우저 컨트롤에서 엔터키 막을 일이 있어서 추가함 private void BrowserDocumentComplete(object sender, WebBrowserDocumentCompletedEventArgs e) {this.editorWebBrowser.Document.Body.KeyDown += KeyDownHandler;} // ReturnValue 속성을 이용함private void KeyDownHandler(object sender, HtmlElementEventArgs e) {if(e.KeyPressedCode == 13) {e.ReturnValue = false; return;}} 2017. 9. 26.
DataTable에서 Group By Sum 하기 DataTable 에서 Group by 할일이 생겼는데, LINQ를 사용할 수 없는 상태였다.참으로 좋은 시스템을 가지셔서 아직 .NET 2 버젼이기 때문이다. 헐~아래 함수를 만드신 아주 귀하신 분때문에 문제를 해결할 수 있었다. private DataTable GetGroupedBy(DataTable dt, string columnNamesInDt, string groupByColumnNames, string typeOfCalculation) { //Return its own if the column names are empty if (columnNamesInDt == string.Empty || groupByColumnNames == string.Empty) { return dt; } //Once .. 2015. 1. 19.
C# DataTable에서 특정 컬럼만 Select해서 DataTable 만들기 DataTable.Select() 함수는 DataRow[] 를 반환해서 가끔 곤란하다. 결과로 DataTable을 반환 받고 원하는 컬럼만 선택할 수 있는 방법은 아래와 같다. dt라는 DataTable에 쿼리의 결과가 있다고 가정하고 시작한다. DataTable dt2 = dt.DefaultView.ToTable(false, new string[] {"Col1", "Col2", "Col3"}); 위와 같이 하면 dt2에 원하는 컬럼과 데이터가 복사된다. 2015. 1. 18.
C# 1년전 같은주차 같은요일 날짜 구하기 검색 조건 세팅 중에기준일자 대비 1년전 같은주차 같은요일 날짜 구해달라는게 있었다.삽질하다가 만든 허접한 클래스이다.필요하신 분은 사용해 보시고 버그가 있으면 피드백 주셔서 발전시켰으면 한다. public class CustmizeCalendar { #region 전역변수 System.Globalization.DateTimeFormatInfo dfi = System.Globalization.DateTimeFormatInfo.CurrentInfo; System.Globalization.Calendar cal = System.Globalization.CultureInfo.InvariantCulture.Calendar; #endregion #region 생성자 /// /// 생성자 /// public Cus.. 2014. 10. 23.
C# OLEDB로 엑셀 읽기 시 문자 또는 숫자가 읽히지 않을 때 엑셀 읽어서 체크드 리스트에 바인딩하고 있었다.테스트로 만든 엑셀에 데이터를 1열에 1, 2, 3, 4, AAA, 5, 6, 7 이렇게 넣었다.그런데 AAA가 빈 문자열로 읽혀지는 것이었다.그래서 구글링을 했더니 역시나 해답은 있었다.OLEDB 연결자에 IMEX=1을 추가해 주면 된다. 엑셀을 읽을 때, 처음 몇 로우를 읽은 후 얘가 문자열 타입인지 숫자 타입인지 결정한다고 한다. 그럴 경우, 다른 타입의 데이터가 들어가 있으면 위와같은 문제가 발생하는 것이었다.내 경우는 1, 2, 3, 4 읽었더니 "어!! 숫자네" 하다가 AAA가 나오니 무시한 거였드랬다.즉, 어땠든 IMEX는 Default가 0이다. IMEX=1로 하면 되더라는 말씀 2014. 9. 17.
C# request 인코딩 처리하기 후아..EUC-KR로 받는 시스템과 인터페이스를 진행했다.후... 고생고생하며 했는데결과는 웹에 있는 소스를 사용하면 됬다는것..받는 업체 쪽에서도 정확한 가이드를 주지 않아 더 고생했음.정상으로 주고 받은 소스는 아래에.. string url = "param1=가나다¶m2=헤헤헤; System.Net.WebRequest req = System.Net.WebRequest.Create("http://url"); byte[] param = UTF8Encoding.UTF8.GetBytes(url); req.Method = "POST"; req.ContentType = "application/x-www-form-urlencoded; charset=UTF-8"; req.ContentLength = para.. 2014. 2. 5.
DataRow에서 rowID 구하기 C# DataRow 에서 rowID 접근하려면속성으로 지원이 되지 않기 때문에 아래처럼 해야 한다. System.Reflection.FieldInfo fInfo = drRow.GetType().GetField("_rowID", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);int rowID = Convert.ToInt32(fInfo.GetValue(drRow));rowID = rowID - 1; 실제로 1을 빼야 Zero base 가 됨. 끝 2014. 2. 3.
C# 에서 웹브라우져 실행시키기 C# 에서 웹브라우져 실행시키기 System.Diagnostics.Process.Start("http://url");로 하면 기본 브라우져가 열린다. 끝 2014. 2. 3.
C# 초간단 파일 검색 asp.net으로 파일 검색을 간단하게 구현해야 했다. 뚝딱 만들어서 처리한 내용 c# 부분만 발췌한다. protected void Page_Load(object sender, EventArgs e) { if (ItemNm.Text == "") { lblItemNm.Text = ""; return; } StringBuilder s = new StringBuilder(10000); System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(@"E:\ITEM_IMAGES"); System.IO.FileInfo[] fs = di.GetFiles("*" + ItemNm.Text + "*"); //s.Append("*" + ItemNm.Text + "*"); foreac.. 2014. 1. 15.
C# 웹 서비스 확장 응용하기 환경 : visual studio 2010, .NET 4, iis7.0, windows 7 Enterprise K 이전 아티클을 먼저 확인해야 함 http://findfun.tistory.com/C# 웹 서비스 만들기 및 테스트 작업 내용 웹 서비스에 새로운 메소드 추가 - setMsg(string msg) : 메시지를 받아서 세션변수에 저장 - getMsg() : 세션변수에 저장된 메시지를 리턴 윈폼에 컨트롤 추가 - 텍스트 박스 - 버튼 추가 텍스트 박스에 입력된 내용을 버튼 클릭 시 웹 서비스 함수로 전달 세션변수에 담았다가 꺼내서 메시지 창으로 출력 웹 서비스 추가하기 1. visual studio 2010 실행 > 웹 사이트 열기 > webservice_test 선택 2. 솔루션 탐색기 오른쪽 .. 2011. 4. 19.
C# 웹 서비스 만들기 및 테스트 환경 : visual studio 2010, .NET 4, iis7.0, windows 7 Enterprise K 웹 서비스 만들기 1. visual studio 2010 실행 2. 파일 > 새 웹 사이트 > 설치된 템플릿에서 visual c# 선택 > ASP.NET 웹 서비스 선택(.net4 버전에서는 나오지 않기 때문에 .NET 3.5 선택) 3. 찾아보기 > 파일 시스템 대화상자 > 로컬 IIS 선택 > 새 웹 응용프로그램 만들기 > webservice_test 입력(원하는걸로 입력) 4. 열기 > 프로젝트 생성 > ctrl + F5 로 빌드 및 실행 5. http://localhost/webservice_test/Service.asmx 주소를 가진 웹브라우저 실행됨 응용 프로그램 만들기 1. vi.. 2011. 4. 19.