날짜에서 요일 찾기
오라클의 날짜에서 요일을 찾는 방법은 아래와 같다
==> 글의 출처 <==
------------------------------------------------------------------------
to_char(날짜, 'd')
ex) select to_char(sysdate, 'd') from dual;
========================================
1 : 일요일
2 : 월요일
3 : 화요일
4 : 수요일
5 : 목요일
6 : 금요일
7 : 토요일
========================================
------------------------------------------------------------------------
'프로그래밍??? > 오라클' 카테고리의 다른 글
비트연산과 날짜 설정을 조합하여 사용하기 (0) | 2015.05.18 |
---|---|
비트 연산 하기 (0) | 2015.05.18 |
Oracle Sequence value are not ordered (0) | 2015.04.03 |
LOB Index에 Nologging 설정하기 - LOB SEGMENT 생성 GUIDE (0) | 2015.04.03 |
ORA-29275 : 부분 다중 바이트 문자 (0) | 2015.03.19 |
AES의 block mode 관련 사항
AES 관련 코딩을 하다보니 내가 연결하려는 서버측과 내가 가지고 있는 C++ 소스의 상황이 달랐다.
예제로 구한 코드에서 IV(초기화 벡터)값을 요구 했다.
하지만 고객사에서 보내온 Java 파일에는 해당 값들이 전혀 없었다.(링크된 내용과 동일한 코드였다)
알고 봤더니... 다음과 같은 Block Mode들이 존재 했다.
내쪽에서는 CBC를 사용하는 C++ 코드를 사용했고 상대측에서 보내온 자바파일은 디폴트를 사용했는데 자바는 ECB가 기본이었다
자료 출처는 AES-128-CBC 를 이용하는 방법 을 참고했다
아래의 자료는 위 출처의 자료이다.
AES-128-CBC 를 이용하는 방법
AES는 Block으로 나눠어서 암호화를 하는데 128, 192, 256비트로 나눌 수가 있다.
Block으로 암호화를 할때는 아래와 같이 4가지 모드가 있는데
1. ECB ( Electric Code Book )
2. CBC ( Cipher Block Chaining )
3. OFB ( Output Feed Back )
4. CFB ( Cipher Feed Back )
원래 위의 4개 모드는 DES 이용을 위해 고안되었는데 DES에 한정하지 않고 모든 Block암호에 적용이 가능하다.
이외에도 PCBC와 Counter Method등의 새로운 모드도 고안되고 있다고 한다.
먼저 ECB 모드를 살펴보자.
ECB모드는 1Block씩 단순히 처리를 한다.
암호문공격에 취약하며 사이즈가 큰 문서의 암호는 어울리지 않아 크게 쓰이고 있지는 않은듯하다.
http://jo.centis1504.net/wp-content/uploads/2010/11/Encryption-ECB_MODE.swf
두번째로 CBC모드인데 앞서의 ECB에서의 암호화한 Block의 결과를 다음의 Block에 XOR 연산하여 나가는게 특징이다. 이때 제일 처음의 암호화시에는 마지막 블럭결과를 이용하거나 IV (Initial Vector)를 이용하게 된다.
http://jo.centis1504.net/wp-content/uploads/2010/11/Encryption-CBC_MODE.swf
세번째로 OFB모드인데 IV를 암호화하여 그것을 다시 암호화한 후 계속 난수를 생성한다. 그렇게 생성된 난수리스트를 XOR 연산에 의해 원문에 적용하여 암호화하는 방식이다. 즉, Block암호를 Stream암호와 같이 사용한다고 보면 되겠다.
http://jo.centis1504.net/wp-content/uploads/2010/11/Encryption-OFB_MODE.swf
상세정보는 http://www.triplefalcon.com/Lexicon/Encryption-Block-Mode-1.htm 를 참조할것.
그럼 Java에서 AES-128-CBC를 이용하는 방법은 아래와 같다.
공통키를 생성하는 방법은 이전 포스트를 참조할것.
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secureKey);byte[] iv = cipher.getIV();
byte[] encryptedData = cipher.doFinal("".getBytes());
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE,secureKey);
byte[] iv = cipher.getIV();byte[] encryptedData = cipher.doFinal("".getBytes());
복호화는 아래와 같다.
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
AlgorithmParameters iv = AlgorithmParameters.getInstance("AES");
iv.init("IV".getBytes());
cipher.init(Cipher.DECRYPT_MODE, secureKey, iv);
byte[] plainData = cipher.doFinal(encryptedData);
'프로그래밍??? > C/C++' 카테고리의 다른 글
Creating STL Containers in Shared Memory (0) | 2015.07.10 |
---|---|
공유 메모리에 STL Container를 올리려고 하게 된 연유 (0) | 2015.07.10 |
AES 암호/복호 C/C++ 기능 구현 (5) | 2015.05.06 |
multi thread에서 Mutex 사용시 에러... (0) | 2015.03.04 |
Producer/Consumer 큐 구현하기(std::vector와 Template를 함께 사용하기) (4) | 2015.02.24 |
AES 암호/복호 C/C++ 기능 구현
일년에 열번도 사용하지 않을 서버를 개발하고 있다.
중요한 건 나름 다양한 기술이 포함되어 있다는 것이다.
TCP/IP는 기본... 해당 서버쪽에서는 Health 체크도 했으면 싶어한다.
AES 암호화가 기본이기도 하다.
암호화를 잘 모르지만 나름 잘 정리된 싸이트와 라이브러리를 찾았다.
덕분에 매우 잘 쓰고 있다.
출처는 AES 암호/복호 C/C++ 기능 구현 이다.
아래의 내용은 해당 출처 내용의 복사본이다.
------------------------------------------------------------------------------------------------
AES 암호/복호 C/C++ 기능 구현
1. Cryptopp(Crypto++) 다운로드
- Cryptopp 홈피 : http://cryptopp.sourceforge.net/
- 다운로드 : http://sourceforge.net/project/showfiles.php?group_id=6152&package_id=6210
2. Cryptopp(Crypto++) 컴파일
- 다운 받은 파일을 압축 vna
- make;make install(make 만 한다음 libcryptopp.a, cryptest.exe 나오면 성공
- 원하는 libcryptopp.a 파일과 .h파일을 include디렉토리에 카피
3. AES 암호화/복호화 샘플 예제
- 앞서 등록한 포스트인 Flex 소스와 상호 암/복호가 가능하게 구현함
- key, iv를 활용하며 암호 문자열은 base64 인코딩함
- 추후 Java, ASP, PHP, C#도 공개할 예정
#include <iostream>4. 실행 결과
#include <iomanip>
#include "cryptopp/cryptlib.h"
#include "cryptopp/modes.h"
#include "cryptopp/aes.h"
#include "cryptopp/filters.h"
#include "cryptopp/base64.h"
void hex2byte(const char *in, uint len, byte *out)
{
for (uint i = 0; i < len; i+=2) {
char c0 = in[i+0];
char c1 = in[i+1];
byte c = (
((c0 & 0x40 ? (c0 & 0x20 ? c0-0x57 : c0-0x37) : c0-0x30)<<4) |
((c1 & 0x40 ? (c1 & 0x20 ? c1-0x57 : c1-0x37) : c1-0x30))
);
out[i/2] = c;
}
}
int main(int argc, char* argv[]) {
//
// 키 할당
//
byte key[CryptoPP::AES::DEFAULT_KEYLENGTH];
memset(key, 0x00, CryptoPP::AES::DEFAULT_KEYLENGTH );
char* rawKey="f4150d4a1ac5708c29e437749045a39a";
hex2byte(rawKey, strlen(rawKey), key);
// IV 할당
byte iv[CryptoPP::AES::BLOCKSIZE];
memset(iv, 0x00, CryptoPP::AES::BLOCKSIZE );
char* rawIv="86afc43868fea6abd40fbf6d5ed50905";
hex2byte(rawIv, strlen(rawIv), iv);
//
// 평문 할당
//
std::string plaintext = "http://mimul.com/pebble/default";
std::string ciphertext;
std::string base64encodedciphertext;
std::string decryptedtext;
std::string base64decryptedciphertext;
//
// 평문 출력
//
std::cout << "Plain Text (" << plaintext.size() <<
" bytes)" << std::endl;
std::cout << plaintext;
std::cout << std::endl << std::endl;
unsigned int plainTextLength = plaintext.length();
//
// AES 암호화 수행
//
CryptoPP::AES::Encryption
aesEncryption(key, CryptoPP::AES::DEFAULT_KEYLENGTH);
CryptoPP::CBC_Mode_ExternalCipher::Encryption
cbcEncryption(aesEncryption, iv);
CryptoPP::StreamTransformationFilter
stfEncryptor(cbcEncryption, new CryptoPP::StringSink( ciphertext));
stfEncryptor.Put(reinterpret_cast<const unsigned char*>
(plaintext.c_str()), plainTextLength + 1);
stfEncryptor.MessageEnd();
//
// Base64 인코딩
//
CryptoPP::StringSource(ciphertext, true,
new CryptoPP::Base64Encoder(
new CryptoPP::StringSink(base64encodedciphertext)
) // Base64Encoder
); // StringSource
//
// Base64 인코딩 문자열 출력
//
std::cout << "Cipher Text (" << base64encodedciphertext.size()
<< " bytes)" << std::endl;
std::cout << "cipher : " << base64encodedciphertext << std::endl;
std::cout << std::endl << std::endl;
//
// Base64 디코딩
//
CryptoPP::StringSource(base64encodedciphertext, true,
new CryptoPP::Base64Decoder(
new CryptoPP::StringSink( base64decryptedciphertext)
) // Base64Encoder
); // StringSource
//
// AES 복호화
//
CryptoPP::AES::Decryption aesDecryption(key,
CryptoPP::AES::DEFAULT_KEYLENGTH);
CryptoPP::CBC_Mode_ExternalCipher::Decryption
cbcDecryption(aesDecryption, iv );
CryptoPP::StreamTransformationFilter
stfDecryptor(cbcDecryption, new CryptoPP::StringSink(decryptedtext));
stfDecryptor.Put( reinterpret_cast<const unsigned char*>
(base64decryptedciphertext.c_str()), base64decryptedciphertext.size());
stfDecryptor.MessageEnd();
//
// 복호화 문자열 출력
//
std::cout << "Decrypted Text: " << std::endl;
std::cout << decryptedtext;
std::cout << std::endl << std::endl;
return 0;
}
- 아래 결과를 여기서 암호문을 디코딩해보세요. 정상적으로 복호화됩니다.
Plain Text (31 bytes)
http://mimul.com/pebble/default
Cipher Text (65 bytes)
cipher :
TrP74bYahMS3MRB0zbP9HEitaqVMsfWh/pmpygYE9iA3JN4p5tyMejSf9u2GBS/9
Decrypted Text:
http://mimul.com/pebble/default
Re: AES 암호/복호 C/C++ 기능 구현
다만, 약간의 수정이 필요할 듯 하여 코멘트를 남깁니다.
1. AES 과정 중
As is
stfEncryptor.Put(reinterpret_cast<const unsigned char*> (plaintext.c_str()), plainTextLength + 1);
To be
stfEncryptor.Put(reinterpret_cast<const unsigned char*> (plaintext.c_str()), plainTextLength);
2. Base64 과정 중
As is
new CryptoPP::StringSink(base64encodedciphertext)
To be
new CryptoPP::StringSink(base64encodedciphertext),false
'프로그래밍??? > C/C++' 카테고리의 다른 글
Creating STL Containers in Shared Memory (0) | 2015.07.10 |
---|---|
공유 메모리에 STL Container를 올리려고 하게 된 연유 (0) | 2015.07.10 |
AES의 block mode 관련 사항 (0) | 2015.05.08 |
multi thread에서 Mutex 사용시 에러... (0) | 2015.03.04 |
Producer/Consumer 큐 구현하기(std::vector와 Template를 함께 사용하기) (4) | 2015.02.24 |
리더가 조직을 침묵 시킨다
출처 : http://ppss.kr/archives/37753
리더가 조직을 침묵시킨다
송강호라는 배우를 세상 밖으로 끄집어 낸 ‘넘버 3’라는 영화가 있다. 3류 건달(도 안되는) 송강호가 자신들의 부하들을 앞에 놓고 ‘헝그리 정신’에 대해 말도 안되는 일장 연설을 하는 장면은 지금 다시 봐도 재밌고 명연기란 바로 이런 것이 아닌가 하는 생각이 들게 한다. 하지만 이 영화 장면은 우리 내 사회의 한 단면을 이야기 해주고 있기도 하다.
조직 내 침묵 현상(Organizational Silence)
리더가 말도 안되는 주제로 논리도 없이 이야기 한다. 그리고 부하들은 리더 말이 터무니 없음에도 불구하고 무릎 꿇고 경청만을 해야 한다. 이러한 3류 건달 문화가 우리 사회에, 비즈니스에 만연해 있다는 것이다.
이렇듯 주로 리더 홀로 이야기하고 나머지 구성원들은 조용히 듣고만 있는 현상을 ‘조직 내 침묵 현상(Organizational Silence)’라고 한다.
그렇다면 이런 조직 내 침묵현상은 왜 생기는 것일까? 영화를 보면 약간의 힌트를 얻을 수 있다.
송강호는 헝그리 정신의 위대함에 대한 예를 들면서 ‘현정화, 현정화도 라면만 먹고 육상에도 금메달 3개나 따버렸어’라는 말을 하자 부하 한 명이 ‘임춘애입니다, 형님!’라고 정확한 사실을 알려준다.
그러자 송강호는 그 부하를 죽일듯이 패고 다른 부하들에게 ‘하..하늘이 내.. 내가 빨강색이라면 빨강색인 것이야!’라며 분에 못이겨 더듬거리며 호통을 친다. 그리고 침묵은 이어진다.
조직 내 침묵 현상을 1차적으로 리더의 커뮤니케이션 능력 부재에서 시작된다. 부하직원이 직언을 하거나 자기와 다른 이야기를 내 놓았을 때 모욕감이나 무시하는 발언을 통해 부정적 피드백을 계속 주게 된다면 부하 직원은 결국 말을 할 수 없게 된다.
또한 부정적 피드백이 아니라 할지라도 팀원들의 적극적 아이디어에 긍정적 피드백을 주면서 실제로는 피드백처럼 리더가 전혀 실행에 옮기지 않는다면 당연히 팀원들은 말을 하고 싶어하지 않게 된다. 말해도 소용이 없기 때문이다.
리더의 이런 부적절한 반응과 더불어 다양한 아이디어를 제시하고 올바른 비즈니스를 위해 투절하게 투쟁하는 직원들은 승진이 안되고 조용히 리더의 말만 따른 이들이 임원이 되는 인사 시스템도 조직 내 침묵 현상을 불러 일으킬 수 있다. 거기에 상사에게 복종은 미덕이라는 유교적 문화까지 조직 문화에 뿌리 깊게 박혀 있게 된다면 침묵의 시간을 길고 깊어 질 수 밖에 없다.
그렇다면 이런 조직 내 침묵 현상이 지속되게 된다면 어떤 문제점이 발생하게 될까? LG경제연구소에 의하면 세가지의 폐해가 생길 것이라고 한다.
조직내 침묵현상의 폐해들
먼저 조직 내에 집합적 창의성이 발휘되기 어려워 진다. 창의성이라고 하는 것은 이질적인 요소들이 서로 충돌할 때 나타난다.
버클리대학교 심리학 교수인 챌런 네메스(Charlan Nemeth)는 창의성에 대한 흥미로운 실험을 하였다. 실험 참가자들에게 한 가지 색으로 되어 있는 슬라이드를 보여준 후 거기에서 부터 자유연상을 하게 했다. 파란색 슬라이드를 보여주자 약 80%는 파란색과 관련된 매우 평범한 자유연상을 했고 약 20%는 ‘외롭다’, ‘아일랜드’ 등 평범치 않은 답을 했다.
이후 네메스는 실험에 작은 변형을 주었다. 각 실험 그룹에 몰래 배우들을 들여보내 매우 엉뚱한 답을 하게 한 것이다. 예를 들어 파란색 슬라이드를 보여주자 저것은 빨간색이나 녹색이라며 엉뚱한 말을 하기 들어 놓았다.
그러자 이상한 일이 벌어졌다. 너머지 피실험자들에게서 매우 창의적인 아이디어들이 쏟아진 것이다. 서로 이질적인 것이 충돌해 창의성을 발휘한 것이다. 당연히 조직 내 침묵현상은 이러한 조직 내의 집합적 창의성을 말살하게 된다.
둘째, 리더의 계획이나 의도가 부하 직원들에게 명확히 전달되기 어렵다. 왜냐하면 부하직원들이 만약 리더의 의도를 이해하지 못했다면 ‘질문’을 해야 한다. 하지만 질문을 하지 않은 상태에서 그냥 일이 진행되게 된다면 리더가 의도한 것과 상이한 결과가 발생할 수 있다.
그래서 어떤 임원들은 ‘다들 열심히 적고 있길래 내 말을 다 알아들은 줄 알았다. 그런데 나중에 전혀 엉뚱한 일을 해 놓은 걸 보곤 황당했다.’라는 말이 나오는 것이다.
마지막으로 조직 내 침묵현상은 조직원들의 냉소주의를 확대 재생산한다. 침묵은 하고 싶은 말도 못하는 상황을 말한다. 다시 말해 그 자체가 스트레스가 될 수 있다. 그리고 이러한 스트레스가 쌓이면 조직에 대한 충성도나 의욕이 꺾일 수 밖에 없고 이러한 상황을 조직원 스스로가 인지하게 되면서 조직에 대해 냉소적으로 바뀌게 된다는 것이다. 이런 조직의 생산성은 굳이 말하지 않아도 알 것이다.
비즈니스에서 3류는 살아남기 힘들다. 조직 내 침묵현상이 지배하고 있다면 그 조직은 3류나 마찬가지다. 리더가 ‘헝그리 정신’을 항상 잊지 말자라고 말해도, 조직 내 침묵은 그저 조직 자체를 ‘헝그리’하게 하게 만들어 생산성을 낮춘다.
지위 고하를 막론하고 자유롭게 아이디어와 의견을 내 놓을 수 있는 조직이야 말로 넘버 1 조직의 자격이 있지 않을까?
같이 읽으면 좋은 글
원문 : 그녀생각’s 생각
'잡다한것 > 스크랩' 카테고리의 다른 글
도커와 가상화 (0) | 2016.10.18 |
---|---|
게임이나 SNS상의 호남차별에 대한 자료 (0) | 2016.08.22 |
[다시보는 명연설]1969년 효창운동장 김대중 연설 동영상 (0) | 2015.03.27 |
[개그가 아닌 좌절] 또 다른 절망만 남은 주차장 지붕 뒷 이야기. (0) | 2011.01.13 |
[좌절개그] 입주오피스텔 주차장 지붕때문에 게임심의 못받는 대한민국.ㅜ.ㅜ (2423) | 2011.01.06 |