윤곽선이 표시된 here으로 PVKS를 구현하고 있습니다. 필자는 기사에서 제시된대로 작동하지만 (PHP에서는), 필자는 수행 방법을 알아 내려고하는 추가 요구 사항이 있습니다. 생성 된 코드에 날짜와 3 자리 숫자를 어떻게 포함시켜야 하는지를 파악하려고합니다. 나는 여기서부터 시작해야할지 모르겠다. 그래서 솔직히 아무 것도 시도하지 않았다. 불행히도 조합에서는 고유하지 않으므로 시드 값으로 해시 할 수는 없습니다. 내가 할 수있는 한 getKeyByte 함수의 일부가 될 수 없다. 그 함수에 대한 입력은 유효한 키의 알고리즘을 정의하는 seed 및 일부 인수 만 사용해야한다. 생성기와 유효성 검사기는 정적이어야하므로 생성기와 유효성 검사기간에 동일해야합니다. 이런 종류의 업무에 대해 수락 된 관행이 있습니까?일련 번호로 데이터 임베딩
-2
A
답변
0
직접 관리해보세요. 나는 내가 키 바이트에 값을 인코딩 할 수있는 방법을 찾으려고 노력하면서 물건을 복잡하게 만들었다는 것을 깨달았다. 이 작업을 수행하는 방법은 (잘, 내가 한 것처럼) 키 바이트 다음과 체크섬 앞에 여분의 바이트를 추가하는 것입니다. 다른 키 바이트처럼 유효성을 검사 할 필요는 없지만 체크섬에 영향을 미칩니다.
다음은 필자가 추가하고 싶은 새로운 섹션이있는 키 생성 및 유효성 검사와 관련된 클래스입니다.
static public function generateKey($extraKeyArgs = array(), $encodedData = array())
{
$args = self::instanceKeyArgs($extraKeyArgs);
$keyBytes = array();
$seed = self::getSeed();
$hexSeed = self::intToHex($seed,self::$seedWidth);
$key = $hexSeed;
$numKeys = count($args);
for ($i=0; $i < $numKeys; $i++) {
list($a, $b, $c) = $args[$i];
$keyBytes[$i] = self::getKeyByte($seed, $a, $b, $c, self::$keyWidthBytes);
$key .= self::intToHex($keyBytes[$i],self::$keyWidthHex);
}
// Section added to handle encoded data
foreach ($encodedData as $data) {
// Make $data an integer value, one byte wide.
$data = (((int) $data) & 255);
$keyBytes[] = $data;
$numKeys++;
$key .= self::intToHex($data,self::$keyWidthHex);
}
// End Section
$checksum = self::getChecksum($key);
$key = $hexSeed . self::$seperator;
for ($i=0; $i < $numKeys; $i++) {
$key .= self::intToHex($keyBytes[$i],self::$keyWidthHex);
if ($i & 1) {
$key .= self::$seperator;
}
}
if (substr($key, -1) !== self::$seperator) {
$key .= self::$seperator;
}
$key .= $checksum;
return $key;
}
static public function checkKey($key, $extraKeyArgs = array(), &$data = array())
{
$args = self::instanceKeyArgs($extraKeyArgs);
$numKeys = count($args);
if (!self::checkKeyChecksum($key)) {
return false; // Failed checksum! Maybe a mistype or optical reader error?
}
$key = self::normalizeKey($key);
// TODO - we would check against a blacklist here if we wanted to implement that.
$seed = hexdec(substr($key,0,self::$seedWidth));
if (!is_int($seed) || $seed < 1) {
return false; // Failed to get seed. Are you sure this key came from here?
}
$key = substr($key, self::$seedWidth, (strlen($key) - (self::$seedWidth + self::$checksumWidth)));
for ($i=0; $i < $numKeys; $i++) {
$keyByte = substr($key, 0, self::$keyWidthHex);
$key = substr($key, self::$keyWidthHex);
list($a, $b, $c) = $args[$i];
if ($keyByte !== self::intToHex(self::getKeyByte($seed, $a, $b, $c, self::$keyWidthBytes),2)) {
return false; // Key byte failed check. Possible forgery attempt?
}
}
// This line added to handle encoded data
$data = array_map('hexdec', str_split($key, self::$keyWidthHex));
return true; // Valid Key, Yay!
}
관련 문제
- 1. 문자열을 일련 번호로 포맷하십시오.
- 2. 일련 번호로 PHP 페이지 탐색
- 3. 일련 번호로 처리기의 내용을 처리합니다.
- 4. 이 일련 번호로 Google에서 나를 보내고 있습니다.
- 5. Json.Net - 따옴표없이 속성 이름을 일련 번호로 지정
- 6. libusb : 일련 번호로 장치 가져 오기
- 7. NSUndoManager에서 상태 데이터를 일련 번호로 바꿉니다.
- 8. .NET에서 임의의 문자열을 일련 번호로 serialize
- 9. Android 일련 번호로 여러 하위보기 애니메이션하기
- 10. 데이터 일련 화
- 11. iWork 번호로 데이터 내보내기
- 12. 텍스트 파일의 새 줄을 일련 번호로 지정하지 않음
- 13. 자동 증분 ID를 9 자리 임의의 일련 번호로 변환
- 14. active_model_serializers를 사용하여 사용 권한을 일련 번호로 (예 : CanCan)
- 15. Sitecore에서 Git 자동 설정이있는 항목을 일련 번호로 지정했습니다.
- 16. "this"에 대한 일련 번호로 된 참조를 다시 사용하십시오 - 키워드
- 17. vendorID, productID 또는 일련 번호로 COM을 통해 Arduino에 연결하는 방법
- 18. WCF : 일반 이름이 아닌 일련 번호로 인증서를 찾을 수 없습니다.
- 19. ASP.NET MVC 3 + 콜렉션을 일련 번호로 표시 <table>
- 20. bash 스크립트의 특정 범위 내에서 임의의 일련 번호로 일련 번호 생성
- 21. MongoDB 데이터 모델링 : 문서 임베딩 딜레마
- 22. 설정 일련 번호가 이미 데이터
- 23. 스펙트럼 임베딩 - 스펙트럼 클러스터링
- 24. CD의 일련 번호 찾기
- 25. 긴 일련 번호 (10 바이트)를 저장하는 데이터 유형
- 26. 배열에 일련 화 된 데이터 추가하기 - PHP
- 27. MySQL 업데이트 일련 번호가 지정된 데이터
- 28. 임베딩 YouTube 동영상
- 29. 임베딩 SDL GTK +
- 30. 임베딩 CGI 비디오
@close voter - 내가 정리할 수있는 특정 문제가 있습니까? 아니면 ...? –