При попытке выполнить транзакцию я всегда получаю эту ошибку в качестве ответа при использовании правильной TPK для шифрования моего PINBLOCK, который уже подтвержден. Хотя, я не совсем уверен в том, что алгоритм, который использовался для шифрования этих данных, в результате вызывает эту ошибку, потому что ожидаемый алгоритм является алгоритмом DES (из приведенной документации), который давал translatedPINBlock: 99-Wrong Format, но после обновления кода для использованияPINBLOCK не содержит допустимого значения [обновлено]
public String do3DESEncryption(String key, String text) {
String encryptedInfo = null;
try {
String key1 = key.substring(0, 16);
String key2 = key.substring(16);
encryptedInfo = doDESEncryption(key1, text);
encryptedInfo = doDESDecryption(key2, encryptedInfo);
encryptedInfo = doDESEncryption(key1, encryptedInfo);
} catch (Exception ex) {
System.out.println("do3DESEncryption error message"+ex.getMessage());
ex.printStackTrace();
}
return encryptedInfo;
}
алгоритм я делал использование перед тем, как указано ниже
public String doDESEncryption(String key, String text) {
String encryptedInfo = "";
try {
byte[] theCph = null;
byte[] theKey = null;
byte[] theMsg = null;
theKey = hexToBytes(key);
theMsg = hexToBytes(text);
DESKeySpec ks = new DESKeySpec(theKey);
SecretKeyFactory kf = SecretKeyFactory.getInstance("DES");
SecretKey ky = kf.generateSecret(ks);
Cipher cf = Cipher.getInstance("DES/ECB/NoPadding");
cf.init(Cipher.ENCRYPT_MODE, ky);
theCph = cf.doFinal(theMsg);
encryptedInfo = bytesToHex(theCph);
System.out.println("Just the ePINBLOCK"+encryptedInfo);
} catch (Exception e) {
e.printStackTrace();
}
return encryptedInfo;
}
Я хотел бы знать, если я на самом деле делаю шифрование хорошо, у меня есть доступ к только клиентская сторона. Я просто хочу быть уверенным в том, что делаю в своем собственном конце, и знаю, если есть какая-либо другая коррекция, которую я могу сделать, чтобы избежать этой ошибки. translatedPINBlock: 99-Неправильный формат
это журнал регистрации ошибок из машины один
Postilion исключение: [postilion.realtime.sdk.crypto.XPinLengthError] Описание: криптографической операции() с участием ключевых Ошибка «SBP_KVP», поскольку были указаны недопустимые данные. Недействительные данные были в поле «PIN». Данные недействительны, поскольку длина PIN-кода недействительна. ID: [126] Данные: [ни]
на postilion.realtime.sdk.crypto.impl.rg7000.ARG7000KeyImpl.processErrorCode (ARG7000KeyImpl.java:170) на postilion.realtime.sdk.crypto.impl .rg7000.RG7000DesKeyImpl.processErrorCode (RG7000DesKeyImpl.java:1320) на postilion.realtime.sdk.crypto.impl.rg7000.RG7000DesKeyImpl.processResponseAndErrorCode (RG7000DesKeyImpl.java:1378) на postilion.realtime.sdk.crypto.impl .rg7000.RG7000DesKvpIbmImpl.verifyPin (RG7000DesKvpIbmImpl.java:365) на postilion.realtime.sdk.crypto.DesKvpIbm.verifyPin (DesKvpIbm.java:613) в postilion.postcard.authorizers.IBMPinVerificationData.verify (IBMPinVerificationData.java:281) на postilion.postcard.authorizers.validators.ValidatorPinPostCard.validatePin (ValidatorPinPostCard.java:550) на postilion.postcard.authorizers.validators.ValidatorPinPostCard .validatePinAndPopulateMessageReasonCode (ValidatorPinPostCard.java:281) на postilion.postcard.authorizers.validators.ValidatorPinPostCard.validateOnline (ValidatorPinPostCard.java:78) на postilion.postcard.authorizers.pipeline.adapter.IssuerValidatorAdapter.process (IssuerValidatorAdapter.java : 117) на postilion.postcard.authorizers.pipeline.Pipeline.process (Pipeline.java:315) при postilion.postcard.authorizers.AuthorizerPostCard.authorizeRequestOnline (AuthorizerPostCard.java:339) на postilion.realtime.apps.tranmgr.EventHandlerReqReqMessage.attemptLocalAuthorization (EventHandlerReqReqMessage.java:145) в postilion.realtime.apps.tranmgr .EventHandlerTranReq.processTran (EventHandlerTranReq.java:88) at postilion.realtime.apps.tranmgr.EventHandlerMessage.process (EventHandlerMessage.Java: 64) на postilion.realtime.apps.tranmgr.EventHandlerMessage.processMsg (EventHandlerMessage.java:40) на postilion.realtime.apps.tranmgr.TransactionManager.processNodeMessage (TransactionManager.java:1435) на форейтором .realtime.apps.tranmgr.TransactionManager.processEvent (TransactionManager.java:1360) . (AppProcessor.java:136) [событие ошибки 126]
журнал ошибок из машины 2
:: process0200 messageRetrievedFromStore [51]: 22314F270B978B54 INFO | jvm 1 | 2017/01/04 16:00:21 | Январь 04, 2017 4:00:21 PM hsmm.ncs.core.MessageПроцессор процессаPINBlock INFO | jvm 1 | 2017/01/04 16:00:21 | INFO: MessageProcessor :: process0200 ::
translatedPINBlock: 99-Wrong Format INFO | jvm 1 | 2017/01/04 16:00:21 | Янв 04, 2017 16:00:21 hsmm.ncs.core.MessageProcessor process0200
Для шифрования PIN-кода необходимо использовать определенные форматы. http://www.paymentsystemsblog.com/2010/03/03/pin-block-formats/ –
спасибо за комментарий, я действительно ценю ... PINBLOCK фактически был сгенерирован с устройства, используя формат ISO-0, который также тот же формат ожидался от HSM, так что сомневаюсь в том, какой алгоритм я использую. Я искренне ценю ваше время –
Как долго ключ, не трижды ли? Потому что по моему опыту 3DES теперь предпочтительнее для большинства решений –