2012-11-08 2 views
4

Notre plate-forme API utilisant des hachages CMAC-AES comme signature pour une demande. Nous avons des librairies disponibles pour créer ce hash en Java et .NET mais nous devons aussi trouver une solution pour PHP. Le problème est que je ne trouve rien qui semble générer de façon fiable un hachage correspondant au CMAC généré sur notre serveur ou via la bibliothèque Java/.NET.CMAC-AES hachage avec PHP

La seule bibliothèque que j'ai trouvée est CryptLib, une bibliothèque alpha.

https://github.com/ircmaxell/PHP-CryptLib

Mais il ne génère pas le même hachage et je ne suis pas assez bon avec Crypto pour comprendre pourquoi (il est de forcer la taille des blocs à 16 pour AES, quand ce que je trouve, dit en ligne taille de bloc AES est 128) .

Y a-t-il d'autres voies que je peux emprunter?

+0

http://tools.ietf.org/html/rfc4493 - et probablement c'est 16-octet qui est de 128 bits. En PHP, un octet est un octet qui est un caractère d'une chaîne. – hakre

Répondre

2

La bibliothèque PHP-CryptLib ci-dessus, à la fin, fonctionnera très bien. Mon problème était juste ma propre erreur liée aux données binaires vs. hex.

À l'aide des données de test fournies par la bibliothèque un

require_once 'lib/CryptLib/bootstrap.php'; 

$hasher = new CryptLib\MAC\Implementation\CMAC; 

$key = '2b7e151628aed2a6abf7158809cf4f3c'; // from test/Data/Vectors/cmac-aes ... 
$msg = '6bc1bee22e409f96e93d7e117393172a'; // from test/Data/Vectors/cmac-aes ... 

$cmac = $hasher->generate($msg,$key); 

echo $cmac; 

// $cmac should be 070a16b46b4d4144f79bdd9dd04a287c 
// actually getting ¢ nd{þ¯\ ¥á¼ÙWß­ 

Sauf le hacheur CCMC utilise des données binaires non les caractères ascii si on a besoin de l'emballer paquet à l'aide():

$key = pack("H*", '2b7e151628aed2a6abf7158809cf4f3c'); 
$msg = pack("H*", '6bc1bee22e409f96e93d7e117393172a'); 

Mon cas concret, le monde réel essayait de hacher une chaîne arbitraire, tels que:

$msg = 'Client|Guid-023-23023-23|Guid-0230-2402-252|string|123456|2012-11-08T20:55:34Z'; 

Et à fais que je avais besoin d'une fonction comme ceci:

function pack_str($str) {   
    $out_str = ""; 
    $len = strlen($str); 
    for($i=0; $i<$len; $i++) { 
     $out_str .= pack("c", ord(substr($str, $i, 1))); 
    } 
    return $out_str; 
} 

Une fois que les données ont été emballé avec cette fonction et exécuter à travers le hacheur, je suis le hachage CCMC je me attendais.

Questions connexes