SMC는 전원이나 방열 팬, 백라이트 및 부팅 등 맥 전원 체계와 시스템에 연결된 각종 외부 장치들을 총제적으로 관리하는 칩입니다. 다음과 같은 문제가 발생할 경우 SMC를 초기화하는 것으로 효과를 볼 수 있습니다.
• 배터리 관련 이상 증상 • 배터리 인디케이터 오작동 • 디스플레이 밝기 관련 이상 증상 • 키보드 백라이트 관련 이상 증상 • 시스템 팬 관련 이상 증상 • 전원 버튼 오작동 • 잠자기 관련 이상 증상 • 외부 전원(USB, FireWire등) 관련 이상 증상 • 외부 장치(USB HDD등) 관련 이상 증상 • 외부 모니터 인식 문제 • 에어포트 및 블루투스 관련 이상 증상 • 급작스럽게 시스템 전원이 나가는 증상 • SMS(하드 충격 방지 시스템) 오작동
2-2. SMC 재설정 방법
• 포터블 맥(배터리를 탈착할 수 있는 구형 맥북 모델)
1. (맥이 켜져 있는 상태라면) 맥을 종료시킵니다. 2. 전원 케이블을 맥에서 연결 해제합니다. 3. 배터리를 제거합니다. 4. 전원 버튼을 5초간 눌러준 후 손을 땝니다. 5. 배터리를 다시 장착하고 전원 어댑터를 연결합니다. 6. 전원 버튼을 누르고 OS X을 부팅해 줍니다.
• 포터블 맥(배터리를 탈착할 수 없는 맥북 모델)
1. (맥이 켜져 있는 상태라면) 맥을 종료시킵니다. 2. (전원 케이블이 분리되어 있는 상태라면) 전원 케이블을 연결해 줍니다. (배터리 탈착가능한 모델과 반대입니다.) 3. 내장 키보드의 왼쪽 shift + control + option + 전원 버튼을 동시에 눌러줍니다. 4. 마찬가지로 동시에 위 키들에서 손가락을 땝니다. 5. 전원 버튼을 눌러 맥을 시동시킵니다.
NVRAM/PRAM을 리셋하는 방법은 2016년 맥북프로를 제외한 모든 기종이 동일합니다. 맥이 완전히 꺼져 있는 상태에서 command + option + p + r 키를 먼저 누른 상태에서 전원 버튼'을 누르고 있으세요. 부팅이 한 번 됐다 다시 자동으로 리부팅 됩니다. 그리고 재부팅 직후 누르고 있던 키에서 손을 땝니다.
MacBook Pro (Late 2016) 모델에서 NVRAM을 재설정하는 방법
2016 신형 맥북프로의 경우 시동음이 들리지 않기 때문에 NVRAM을 재설정하는 방법이 조금 다릅니다.
앞서 출시된 다른 맥북은 전원을 켠 뒤 시동음이 들리면 command + option + p + r 키를 길게 누르는 방법으로 NVRAM을 초기화할 수 있습니다. 하지만 시동음이 들리지 않는 2016 맥북프로는 전원을 켠 직 후 command + option + p + r 키를 누르고 20초간 손가락을 떼지 않아야 한다고 합니다. 터치바 탑재 여부와 상관없이 2016년 출시된 모든 맥북프로에 공통으로 적용되는 사항입니다.
extern int encryptSeedCBC( IN BYTE *pbszUserKey, IN BYTE *pbszIV, IN BYTE *pbszPlainText, OUT BYTE *pbszCipherText );
extern int decryptSeedCBC( IN BYTE *pbszUserKey, IN BYTE *pbszIV, IN BYTE *pbszCipherText, OUT BYTE *pbszPlainText );
KISA_SEED_CBC.c
다음과 같이 작성해 준다.
작성에 앞서 main()함수는 제거해주도록 하자.
int encryptSeedCBC( IN BYTE *pbszUserKey, IN BYTE *pbszIV, IN BYTE *pbszPlainText, OUT BYTE *pbszCipherText )
{
printf("\n---------------------------------");
printf("\nplainText : %s\n", (char *)pbszPlainText);
int nPlainTextLen = (int)strlen((char *)pbszPlainText);// 평문의 Byte길이
printf ("\n---------------------------------");
printf ("\nSEED CBC Encryption....\n");
// 암호문의 Byte길이 - 패딩 로직때문에 16바이트 블럭으로 처리함으로 pbszCipherText는 평문보다 16바이트 커야 한다.
int nCipherTextLen = SEED_CBC_Encrypt( pbszUserKey, pbszIV, pbszPlainText, nPlainTextLen, pbszCipherText );
return nCipherTextLen;
}
int decryptSeedCBC( IN BYTE *pbszUserKey, IN BYTE *pbszIV, IN BYTE *pbszCipherText, OUT BYTE *pbszPlainText )
{
int nCipherTextLen = (int)strlen((char *)pbszCipherText);// 암호문의 Byte길이
printf ("\n---------------------------------");
printf ("\nSEED CBC Decryption....\n");
// 평문의 Byte길이
int nPlainTextLen = SEED_CBC_Decrypt( pbszUserKey, pbszIV, pbszCipherText, nCipherTextLen, pbszPlainText );
return nPlainTextLen;
}
private val hexArray = "0123456789ABCDEF".toCharArray()
fun bytesToHex(bytes: ByteArray): String {
val hexChars = CharArray(bytes.size * 2)
for (j in bytes.indices) {
val v = (bytes[j] and 0xFF.toByte()).toInt()
hexChars[j * 2] = hexArray[v ushr 4]
hexChars[j * 2 + 1] = hexArray[v and 0x0F]
}
return String(hexChars)
}
fun main(args: Array<String>) {
val bytes = byteArrayOf(10, 2, 15, 11)
val s = bytesToHex(bytes)
println(s)
}