Android имеет урезанную версию Bouncy Castle и, кажется, не разрешает доступ к классу org.bouncycastle.crypto.macs.HMac, вместо этого следует использовать javax.crypto.Mac.getInstance (алгоритм String) (здесь ) ). Опять же, кажется, что разрешены только некоторые алгоритмы MAC (я видел, что "HMAC-SHA512" работает). Но если вы решите использовать библиотеку SpongyCastle, вы можете сделать это ( здесь ):
CipherParameters p = new KeyParameter(key.getBytes("UTF-8"));
WhirlpoolDigest w = new WhirlpoolDigest();
HMac hm = new HMac(w);
hm.init(p);
hm.update(inbytes, 0, inbytes.length);
byte[] result = new byte[hm.getMacSize()];
hm.doFinal(result, 0);
Включение SpongyCastle может быть проблематичным для многих, потому что он увеличил размер приложения на 1,84 МБ в Android 2.2. Тогда в проект могут быть импортированы только соответствующие файлы:
// интерфейсы
org.bouncycastle.crypto.CipherParameters
org.bouncycastle.crypto.Digest
org.bouncycastle.crypto.ExtendedDigest
org.bouncycastle.crypto.Mac
// классы
org.bouncycastle.crypto.params.KeyParameter
org.bouncycastle.crypto.digests.WhirlpoolDigest
org.bouncycastle.crypto.macs.HMac
org.bouncycastle.crypto.DataLengthException
org.bouncycastle.crypto.RuntimeCryptoException