Échantillon HMAC SHA-256. J'écrirai plus si j'ai le temps.
Clé secrète clé secrète
・ Signer avec HMAC SHA-256 avec cible Ceci est un stylo .
.
La sortie sera «b4197908ed255480db6bbedb27426c89520bcd3b79c81006f70a94f415b43a43».
Premier Java.
package example.misc;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
public class HmacDemo {
private static final String SECRET = "secret key";
private static final String TEXT = "This is a pen.";
public static void main(String[] args) throws Exception {
String algo = "HMacSHA256";
final SecretKeySpec keySpec = new SecretKeySpec(SECRET.getBytes(),
algo);
final Mac mac = Mac.getInstance(algo);
mac.init(keySpec);
final byte[] signBytes = mac.doFinal(TEXT.getBytes());
for (byte signByte : signBytes) {
System.out.printf("%02x", signByte & 0xff);
}
System.out.print("\n");
}
}
La spécification de l'algorithme est redondante, mais y a-t-il seulement une telle manière d'écrire? Je serais heureux si la sortie hexadécimale de la chaîne d'octets pouvait être rendue un peu plus propre. La bibliothèque encodée en Base64 accepte les chaînes d'octets telles quelles. Dans ce cas, cela peut être bon.
Vient ensuite Python
#!/usr/bin/python3
import hashlib
import hmac
SECRET = "secret key"
TEXT = "This is a pen."
print(hmac.new(bytes(SECRET, 'ascii'), bytes(TEXT, 'ascii'), hashlib.sha256).hexdigest())
Ruby suivant.
#!/usr/bin/ruby
require 'openssl'
SECRET = "secret key"
TEXT = "This is a pen."
puts OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new('sha256'),
SECRET, TEXT).unpack("H*")
Recommended Posts