Полагаю, это просто совпадение, потому что криптографическая архитектура Java основана на концепции провайдеров . Похоже, что стандартные JDK-провайдеры для Mac
не проверяют алгоритм из SecretKeySpec
и полностью зависят от алгоритма, сохраненного в поле Mac.algorithm
.
Вы все равно должны установить правильный алгоритм в SecretKeySpec
, потому что ничто не мешает провайдеру проверить алгоритм ключа. Например, если вы посмотрите на Mac.chooseProvider(Key key, AlgorithmParameterSpec params)
закрытый метод, он передает ключ во внешний код:
// if provider says it does not support this key, ignore it
if (s.supportsParameter(key) == false) {
continue;
}