파이썬에서 문자열의 ODIN-1을 생성해야합니다.
아니요, 문서에 따라 다르지 않습니다.
802.11 MAC 주소, ANDROID_ID 또는 DeviceUniqueID의 ODIN-1을 생성합니다. 관련 인용문 :
시드는 운영 체제에서 반환 한 형식에서 변경되지 않아야합니다.
참고 :. 아이폰 OS는 원시 바이트 배열로 나타내는 ... MAC은하지 문자열,하지만 지금 차트 아래에 6 바이트의 배열을 "주소
을 반환 구두점 및 대문자 주위에 모호성을 방지 :
그리고 IIRC는 ANDROID_ID
는 MAC이나 문자열도 64 비트 정수입니다. (나는 윈도우 폰에 대한 DeviceUniqueId
을 모른다.)
그래서, 당신은 아마도 ODIN-1의를 생성해야 6 바이트 배열 [0x74, 0xe2, 0xf5, 0x43, 0xd2, 0xce]
12 자 문자열 "74e2f543d2ce"
.이 샘플에서는 Objective-C에서이를 수행하는 방법을 보여줍니다.
mac = bytes([0x74, 0xe2, 0xf5, 0x43, 0xd2, 0xce])
또는 귀하의 질문에 어떤 형식으로, 아마도 당신이 전혀 MAC 주소를 원하지 않는, 안드로이드를 지정하기 때문에 ...하지만 난 당신이 그냥 잘못된 태그이었다 가정하고 있습니다 : 파이썬, 그것은이다 iOS를 사용하고 있고 을 수행하면 MAC 주소가이됩니다.
어떻게하면됩니까?
해시 단계 : SHA-1 해시 기능을 통해 식별자 시드를 전달합니다.
는 파이썬에서, 그건 :
hash = hashlib.sha1(mac)
결과 메시지 다이제스트는 ODIN-1입니다.
파이썬에서, 그건 :
digest = hash.hexdigest()
것은 함께 퍼팅 :
hashlib.sha1(bytes([0x74, 0xe2, 0xf5, 0x43, 0xd2, 0xce])).hexdigest()
결과하면 문서가 그것이 있어야의 말과 같이 "40 소문자 문자열"입니다 :
'10f4ab0775380aceaca5a2733604efa6d6364b08'
또한, 프리 스크립 션에 대한 설명을 찾고 있다면 wary 페이지에 게시 된 nary spec은 왜 그 페이지에 코멘트를 게시하는 대신에 그것에 대해 물어볼 것입니까? 내가 미리에 다른 작업을 수행 할 필요가 있는지 확실하지 않습니다
:
귀하의 첫 번째 특정 질문에 대답하려면?
사양은 말한다 :
씨가 운영 체제에 의해 반환 된 형식에서 변경되지 않은 남아 있어야합니다.
대답하려면 두 번째 :
또한, 최종 출력이 진수 SHA-1의 다이제스트 또는 뭔가 다른 무엇입니까?
사양 말한다 :
결과 메시지 다이제스트 ODIN-1이다.
는 //이 해시의 형식은 40 소문자 문자열이어야한다 :
한편,이 프로젝트에 첨부 된 샘플 코드 (예상대로는 googlecode에서의 주어진) ...하지만 그건 그다지 도움이되지 않습니다.
iOS sample에는 관련 코드가 완전히 누락되었습니다. 마법사에 의해 생성 된 일반 GUI 응용 프로그램이며 #import "ODIN.h"
및 textView.text = [ODIN1() lowercaseString];
이 viewDidLoad
에 추가되었습니다. 하지만 그 파일은 ODIN.h
이고 해당 파일은 ODIN.m
또는 libODIN.a
이거나 어디에도없는 것으로 보입니다. (project.pbxproj
의 간단한 글에서 분명히 확인하지 못한 파일이 분명히 있음을 알 수 있습니다.)
Android sample에는 관련 코드가 있지만 사양을 분명히 위반합니다. ANDROID_ID
을 유니 코드 문자열로 얻은 다음 을 iso-8859-1으로 인코딩하고 결과 바이트에서 SHA-1을 호출하고 그 중 16 진 다이제스트를 생성합니다. 문서는 명시 적으로 OS가 반환 한 OS 값을 사용한다고 명시합니다. 대신 Latin-1 코드가이를 인코딩합니다.
반면에 Windows sample은 문서가 말하는 것을 수행하는 것 같습니다. DeviceUniqueId를 byte[]
으로 가져 와서 그대로 사용합니다. (그러나 코드는 실제로 작동하지 않습니다. 사용하지 않는 API 호출을 사용하기 때문에 byte[]
을 반환하지 않고 예외를 throw합니다.)
이 시점에서 필자는 왜이 사양을 따르고 있는지 묻습니다. 첫 번째 장소. 다른 사람의 코드와 상호 운용하려는 경우 디자이너가 의도 한 코드를 추측하기보다는이 코드를 사용하여이 스펙을 해석하는 모순 된 방법을 사용하는 것이 좋습니다. 이 맞으면
... 워드 프로세서를
을 애플이 명시 적으로 UDID를 대체 할 MAC 기반으로 아무것도 사용하지 않는 사람들에게 것을 언급하고, ODIN은 UDID를 대체 할 하찮게는 MAC 기반으로 뭔가하지 않기 틀렸다. (이것은 분명히 가능하다. 이것은 산업 표준화위원회 또는 다른 어떤 것으로도 고안된 완전히 생각한 스펙처럼 보이지 않는다.) 그들은 분명히 "씨앗은 운영 체제가 반환 한 형식으로 변경되지 않은 채로 두어야한다. 시스템 ","iOS는 MAC 주소를 문자열이 아니라 6 바이트 배열로 반환합니다. "그리고"원시 바이트 배열로 나타내는 것은 구두점과 대문자를 둘러싼 모호성을 방지합니다 ". – abarnert
나는 링크에 게시 된 예제로 곧바로 갔고 단단하게 유지했습니다. 입력이 다를 경우 어떻게 MAC 주소를 소비해야합니까? OP까지 입력을 표준화하는 업무를 맡겠습니다. 그들은 내 스 니펫을 취하여 자신의 필요에 맞출 수 있습니다. 그들은 아마도'hashlib' 호출에 대한 도움이 필요할 것입니다. – Droogans
"입력이 다를 경우 어떻게 MAC 주소를 소비해야합니까?"라는 의미는 무엇입니까? iOS에서 6 바이트 원시 바이트 배열을 가져옵니다. 그 원시 바이트 배열을 SHA1에 정확히 전달합니다. 이것이 바로 문서가하는 말이며, 이것이 어떻게 문제인지는 알 수 없습니다. – abarnert