티스토리 툴바



2011/05/04 02:07

UITextField 등 입력 필드에 복사/오려두기/붙여넣기 메뉴 금지하는 방법




1
2
3
4
5
6
7
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender {
	UIMenuController *menuController = [UIMenuController sharedMenuController];
	if (menuController) {
		[UIMenuController sharedMenuController].menuVisible = NO;
	}
	return NO;
}





이 소스를 붙여 넣으시면 됩니다.
저작자 표시 비영리
Trackback 0 Comment 0
2011/05/04 02:05

아이폰에서 DES 암호화 및 복호화 사용하기



우선 암호화 / 복호화 하는 함수를 알려드리겠습니다.



/*************************************************************************************************/
- (NSString *)encryptDES:(NSString *)str
{
	NSLog(@"encrypt input string : %@", str);
	NSLog(@"input length : %d", [str length]);
	NSData *data = [str dataUsingEncoding: NSUTF8StringEncoding];
	NSLog(@"data : %@", data);
	unsigned char *input = (unsigned char*)[data bytes];
	NSUInteger inLength = [data length];
	NSInteger outLength = ((inLength + kCCBlockSizeDES) & ~(kCCBlockSizeDES - 1));
	unsigned char *output =(unsigned char *)calloc(outLength, sizeof(unsigned char));
	bzero(output, outLength*sizeof(unsigned char));
	size_t additionalNeeded = 0;
	
	unsigned char *iv = (unsigned char *)calloc(kCCBlockSizeDES, sizeof(unsigned char));
	bzero(iv, kCCBlockSizeDES * sizeof(unsigned char));
	
	NSString *key = @"abcdefg123123123";
	const void *vkey = (const void *) [key UTF8String];
	

	CCCryptorStatus err = CCCrypt(kCCEncrypt,
					  kCCAlgorithmDES,
					  kCCOptionPKCS7Padding | kCCOptionECBMode,
					  vkey,
					  kCCKeySizeDES,
					  iv,
					  input,
					  inLength,
					  output,
					  outLength,
					  &additionalNeeded); 
	 NSLog(@"encrypt err: %d", err);
	
	if(0);
	else if (err == kCCParamError) NSLog(@"PARAM ERROR");
	else if (err == kCCBufferTooSmall) NSLog(@"BUFFER TOO SMALL");
	else if (err == kCCMemoryFailure) NSLog(@"MEMORY FAILURE");
	else if (err == kCCAlignmentError) NSLog(@"ALIGNMENT");
	else if (err == kCCDecodeError) NSLog(@"DECODE ERROR");
	else if (err == kCCUnimplemented) NSLog(@"UNIMPLEMENTED");
	
	NSString *result;
	
	NSData *myData = [NSData dataWithBytesNoCopy:output 
 
length:(NSUInteger)additionalNeeded freeWhenDone:YES];
	NSLog(@"data : %@", myData);
	NSLog(@"encrypted string : %s", [myData bytes]);
	NSLog(@"encrypted length : %d", [myData length]);
	result = [myData base64Encoding];

	NSLog(@"base64encoded : %@", result);
	
	return result;
}

- (NSString *)decryptDES:(NSString *)str
{
	NSLog(@"decrypt input string : %@", str);
	NSData *decodedData = [NSData dataWithBase64EncodedString:str]; 
	 NSLog(@"data : %@", decodedData);
	NSLog(@"base64decoded : %s", [decodedData bytes]);
	
	unsigned char *input = (unsigned char*)[decodedData bytes];
	NSUInteger inLength = [decodedData length];
	NSInteger outLength = ((inLength + kCCBlockSizeDES) & ~(kCCBlockSizeDES - 1));
	unsigned char *output =(unsigned char *)calloc(outLength, sizeof(unsigned char));
	bzero(output, outLength*sizeof(unsigned char));
	size_t additionalNeeded = 0;
	
	
	unsigned char *iv = (unsigned char *)calloc(kCCBlockSizeDES, sizeof(unsigned char));
	bzero(iv, kCCBlockSizeDES * sizeof(unsigned char));
	
	NSString *key = @"abcdefg123123123";
	const void *vkey = (const void *) [key UTF8String];
	

	CCCryptorStatus err = CCCrypt(kCCDecrypt,
					  kCCAlgorithmDES,
					  kCCOptionPKCS7Padding | kCCOptionECBMode,
					  vkey,
					  kCCKeySizeDES,
					  iv,
					  input,
					  inLength,
					  output,
					  outLength,
					  &additionalNeeded); 
	 NSLog(@"encrypt err: %d", err);

	if(0);
	else if (err == kCCParamError) NSLog(@"PARAM ERROR");
	else if (err == kCCBufferTooSmall) NSLog(@"BUFFER TOO SMALL");
	else if (err == kCCMemoryFailure) NSLog(@"MEMORY FAILURE");
	else if (err == kCCAlignmentError) NSLog(@"ALIGNMENT");
	else if (err == kCCDecodeError) NSLog(@"DECODE ERROR");
	else if (err == kCCUnimplemented) NSLog(@"UNIMPLEMENTED");
	
	NSString *result;
	
	
	NSData *myData = [NSData dataWithBytesNoCopy:output 
 length:(NSUInteger)additionalNeeded freeWhenDone:YES];
	NSLog(@"data : %@", myData);
	NSLog(@"decrypted string : %s", [myData bytes]);
	NSLog(@"decrypted length : %d", [myData length]);

	result = [NSString stringWithFormat:@"%.*s",[myData length], [myData bytes]];
	
	
	NSLog(@"output length : %d", [result length]);
	NSLog(@"result : %@", result);

	return result;
}
/*************************************************************************************************/




사용 방법입니다.

우선 암호화를 진행할 곳에

#import <CommonCrypto/CommonCryptor.h>

이 해더파일을 import해주어야 합니다.


그리고 제가 첨부한 파일을 본인의 프로젝트에 추가시키고, 사용할 곳에서 마찬가지로 

#import "NSDataAdditions.h"

해주셔야 합니다.

이유는 밑에서 설명하겠습니다.



그리고 함수를 적어주는건 말 할 필요도 없겠죠.

함수의 input은 string으로 들어갑니다. 물론 output도 string입니다.

NSData로 나오는걸 사용하기 편하도록 고쳐놓았습니다.


[self encryptDES:암호];
[self decryptDES:암호화된 스트링];

이런식으로 사용하면 되겠죠.




위의 함수는

암호화를 한 후 base64로 인코딩을 시킵니다.

base64로 인코딩하는 이유는 암호화가 된 문자열에 가끔 뒤에 쓰레기 값이 붙어 보일 수 있습니다.

이 쓰레기값을 처리할 수 있도록 base64로 비교적 보기 편한 문자열로 인코딩을 시키는 것이죠.

이거 때문에 제가 첨부한 파일들이 필요한겁니다.




이 함수들은

- 암호화

1. 문자열 입력

2. DES 암호화

3. 암호화된 문자열을 base64로 인코딩


- 복호화

1. 암호화되고 base64로 된 문자열 입력

2. base64를 UTF8로 암호화만 되어있는 문자열로 디코딩

3. 복호화


로 진행됩니다.



비밀키는

NSString *key = @"testtesttesttesttest";

이 부분입니다.

원하시는 문자열을 넣으시면 되겠죠.




그럼 도움이 되었으면 좋겠습니다.
저작자 표시 비영리
Trackback 2 Comment 6
  1. BlogIcon 아사다리 2011/05/12 10:23 address edit & del reply

    찾고 있던 건데 너무 고맙습니다.~

    • BlogIcon 신연화 2011/05/13 09:40 address edit & del

      상기 내용은 맥부기에도 올려두었습니다.

  2. BlogIcon 이창우 2012/01/01 12:22 address edit & del reply

    좋은글 감사합니다.

  3. 질문있습니다. 2012/05/05 16:44 address edit & del reply

    좋은 자료 감사합니다. ^^

    자료에 있는 소스를 적용시켜보니, 복호화할 때 59번 라인에서

    아래와 같은 에러가 발생하더군요.

    2012-05-05 16:39:25.060 [63894:12203] +[NSData dataWithBase64EncodedString:]: unrecognized selector sent to class 0x1d6d7b8
    2012-05-05 16:39:25.061 [63894:12203] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[NSData dataWithBase64EncodedString:]: unrecognized selector sent to class 0x1d6d7b8'

    혹시 원인을 아시면 답변 좀 부탁드리겠습니다.

    좋은 하루되세요. ^^

    • BlogIcon 신연화 2012/05/05 22:19 address edit & del

      첨부파일을 프로젝트 내에 import 시키고 사용하는 부분에서

      #import 되어있는지 확인해보십쇼.

  4. 질문있습니다. 2012/05/07 13:09 address edit & del reply

    답변 감사합니다. ^^
    프로젝트내에 타겟이 여러개 있는데 제대로 링크되지 않았던 문제였습니다.

    좋은 하루 되세요. ^^

2010/09/09 15:30

Visual Studio 2008 도구 상자(Tool box) 문제

출처 : 이아우::구석에 짱박힌 휴지통
http://blog.ly.lv/devk/322

이하 본문

.
.
.
VS 2008에서 도구상자에 아이템이 제대로 표시가 안되거나 하는 문제를 겪었다.

노트북에서 Window Mobile(C#) 프로젝트를 생성했는데 UI편집 부분에서 도구상자에 컨트롤이 하나도 표시가 안되는것! 모두 표시를 해도 사용가능한 컨트롤이 하나도 없어서 새로깔아야 하나 하는 생각까지 했을때 구글링으로 찾아낸 정보.

XP 기준으로 다음 디렉토리로 들어가서
C:\Documents and Settings\\Local Settings\Application Data\Microsoft\VisualStudio\9.0

다음의 파일들을 지워주고 VS2008을 재시작 하면 도구상자를 새로 로드하면서 관련 문제가 사라진다.
"toolbox.tbd", "toolboxIndex.tbd", "toolbox_reset.tbd", "toolboxIndex_reset.tbd"


난 Vista를 사용중이라 C:\Users\ 계정명 \AppData\Local\Microsoft\VisualStudio\9.0\ 으로 들어가니 해당 파일이 있었다.
.
.
.




C#의 도구상자가 비활성화 되어 있던 문제를 해결하게 해준 이아우님에게 감사말씀 드립니다.


저작자 표시 비영리
Trackback 0 Comment 2
  1. BlogIcon 이아우 2010/09/24 10:14 address edit & del reply

    하이하이