1864587_ja-JP

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

1864587_ja-JP

1864587_ja-JP

ChangeKey desfire ev3の整合性エラー

こんにちは、私はkeyNo = 0のデフォルトのaesキーを別のaesキーに変更しようとしています。しかし、私は得続けます

コマンドの送信時に整合性エラーが発生し0x1E、CRCが間違っていることを示していると思います。
javascriptで書きました。これが私のcrc32計算関数です

static crc32 = (input) => {
        const crcTable = new Array(256);
        for (let i = 0; i < 256; i++) {
          let c = i;
          for (let j = 0; j < 8; j++) {
            c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));
          }
          crcTable[i] = c >>> 0;
        }
      
        let crc = 0 ^ (-1);
      
        for (let i = 0; i < input.length; i++) {
          crc = (crc >>>  ^ crcTable[(crc ^ input.charCodeAt(i)) & 0xFF];
        }
      
        crc = crc ^ (-1);  
        // Convert the integer to an array of bytes  
        const crcBytes = [];  for (let i = 0; i < 4; i++) { 
            crcBytes.push((crc >>> (i * 8)) & 0xFF);  
        }  
        
        return crcBytes.reverse();
    }​


私の理解では、CRCはCmd + keyNo +(newKey xまたはoldkey)+keyversionで計算されます。こんな感じ。

let data_to_crc = cmd.concat(_keyNo).concat(_newKey).concat(_keyVersion);
let data_to_crc_string = DesfireUtils.getHexFromDecArray(data_to_crc);
let crc_data = DesfireUtils.crc32(data_to_crc_string);

データに対してcrc32関数を実行すると、このオンラインcrc32計算機を使用したときに同じ結果が得られます 
次に、cryptogram = newkey + keyversion + crc_data + パディング
次に、 を送信します。
暗号化された暗号で送信すると、暗号化されていないのと同じ結果が得られます0x1E。暗号化キーはセッション キー、iv = 0 です
Re:ChangeKey desfire ev3の整合性エラー問題を修正しました。問題はCRC32アルゴリズムにあります。
私はこのCコードを使用し、javascriptで書き起こし/実装しました
http://www.rfidiot.org/crc32.c
Tags (1)
No ratings
Version history
Last update:
‎11-21-2025 03:05 PM
Updated by: