System.out.println(...)

UILabel 자동 줄바꿈 (Line-break)

iOS

검색에 자주 걸리는 UILineBreakModeWordWrap 는 더이상 사용되지 않는다.

lbLabel.lineBreakMode = NSLineBreakMode.byWordWrapping

 

 

 

micom 에서 SHA-1 으로 otp 생성하기

micom

우선 Hash, Mac, Signature 에 대해 알아 둘 필요가 있다.

https://rookiecj.tistory.com/368

 

hash, MAC vs Signature 차이점

hash나 MAC, Signature모두 hash를 기본으로 사용하지만 어떤부분이 다른지 살펴본다. 먼저 기본이 되는 hash는 메세지를 요약하는데 사용된다. byte[] data = "plain text".getBytes("UTF-8"); MessageDigest mes..

rookiecj.tistory.com

otp 생성을 위해 시간값과 특정 기기 아이디로 Mac (Message Authentication Code) 를 생성해 보자.

java code example..

https://jar-download.com/artifacts/com.j256.two-factor-auth/two-factor-auth/0.2/source-code/com/j256/twofactorauth/TimeBasedOneTimePasswordUtil.java

 

com.j256.twofactorauth.TimeBasedOneTimePasswordUtil Maven / Gradle / Ivy

com.j256.two-factor-auth two-factor-auth 0.2 compile group: 'com.j256.two-factor-auth', name: 'two-factor-auth', version: '0.2' //Thanks for using https://jar-download.com libraryDependencies += "com.j256.two-factor-auth" % "two-factor-auth" % "0.2" //Than

jar-download.com

c code example..

https://github.com/cantora/avr-crypto-lib

 

cantora/avr-crypto-lib

mirror of avr-crypto-lib (http://code.nerilex.org/bg/avr-crypto-lib.git) - cantora/avr-crypto-lib

github.com

https://github.com/mkj/pihelp

 

mkj/pihelp

A hardware watchdog for a Raspberry Pi using an AVR - mkj/pihelp

github.com

8비트 마이컴에서는 uint64_t 자료형을 사용할 수 없어 문제가 발생한다. 참고할 만한 문서.

https://stackoverflow.com/questions/33498371/wrong-sha-1-hash

 

Wrong SHA-1 hash

I'm planning to use AVR-Crypto's SHA-1 implementation for HMAC. However, I can't seem to generate the correct SHA-1 sum. For instance, if I call the function with the following unsigned char sh...

stackoverflow.com

c code example 에서 micom 을 위해 고쳐져야 하는 부분은

sha1_ctx_t 구조체 선언 부분을 아래와 같이 uint64_t -> uint32_t 로 수정해준다.

/*
typedef struct
{
	uint32_t h[5];
	uint64_t length;
} sha1_ctx_t;
*/

typedef struct
{
	uint32_t h[5];
	uint32_t length;
} sha1_ctx_t;

sha1_lastBlock 함수에서 주석 부분을 아래와 같이 수정해 준다.

uint8_t i;
/*
for (i=0; i<8; ++i)
{
	lb[56+i] = ((uint8_t*)&(state->length))[7-i];
}
*/
for (i = SHA1_BLOCK_BYTES; state->length != 0; state->length >>= 8)
	lb[--i] = (uint8_t)(state->length);

리눅스에서 컴파일 한 것과 다르게 뒤집어진(?) 결과가 나온다.

예를들어 리눅스에서 b696eeac 라면 8비트 마이컴(8051)에서는 acee96b6

함수를 아래와 같이 값을 그냥 리턴하도록 수정해준다.

uint32_t change_endian32(uint32_t x)
{
	//return (((x)<<24) | ((x)>>24) | (((x)& 0x0000ff00)<<8) | (((x)& 0x00ff0000)>>8));
    return x;
}

 

tensorflow 설치시 주의사항

machine-learning

tensorflow 의 설치를 따라가다 보면 몇가지 문제에 부딛힐 수 있다.

 

https://www.tensorflow.org/install/pip?hl=ko

 

pip를 사용하여 TensorFlow 설치  |  TensorFlow

TensorFlow 2.0 베타 사용 가능 tensorflow==2.0.0-rc1 - CPU만 포함하는 미리보기 TF 2.0 베타 빌드(불안정) tensorflow-gpu==2.0.0-rc1 - GPU를 지원하는 미리보기 TF 2.0 베타 빌드(불안정, Ubuntu 및 Windows) 사용 가능한 패키지 tensorflow - CPU만 포함하는 안정적인 최신 출시(Ubuntu 및 Windows) tensorflow-gpu - GPU를 지원하는 안정적인 최

www.tensorflow.org

 

1. 시스템에 Python 개발 환경 설치

64비트 Windows용 Python 3 출시를 설치합니다(선택적 기능으로 pip 선택).

=> 반드시 64비트용을 설치하여야 합니다. 

 

(인터넷에 돌아다니는 설치가이드를 보면 다양한 라이브러리를 사용하기 위해서는 64비트 컴퓨터에서도 32비트용 파이썬을 설치하라는 이야기가 있습니다만... 32비트용을 설치하면 tensorflow 가 설치되지 않습니다.)

=> tensorflow 설치시 에러가 발생하는 경우 (파이썬 버전 문제)

https://devlog.jwgo.kr/2017/12/13/tensorflow-install-error/

=> pip3 install -U pip virtualenv 를 실행하지 말것. 

아래를 먼저 실행하면.. virtualenv 가 설치됨. (위코드를 실행하면 pip.exe 가 사라질 수 있습니다.)

python -m pip install --upgrade pip

2. 가상 환경 만들기(권장)

=> 아래와 같이 변경하여 실행해주세요.

virtualenv --system-site-packages -p python3 ./venv 

 

-> virtualenv --system-site-packages -p python ./venv

=> tensorflow 는 안정 버전을 설치해 주세요. rc 버전을 설치하면 예제들이 실행되지 않습니다.

pip install --upgrade tensorflow

 

tensorflow 안정 버전을 설치해야 구글의 프로그래밍실습에 있는 예제를 따라가기 쉽습니다.

 

https://developers.google.com/machine-learning/crash-course/first-steps-with-tensorflow/programming-exercises?hl=ko