2017-01-11 3 views
1

При попытке выполнить транзакцию я всегда получаю эту ошибку в качестве ответа при использовании правильной 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

+0

Для шифрования PIN-кода необходимо использовать определенные форматы. http://www.paymentsystemsblog.com/2010/03/03/pin-block-formats/ –

+0

спасибо за комментарий, я действительно ценю ... PINBLOCK фактически был сгенерирован с устройства, используя формат ISO-0, который также тот же формат ожидался от HSM, так что сомневаюсь в том, какой алгоритм я использую. Я искренне ценю ваше время –

+0

Как долго ключ, не трижды ли? Потому что по моему опыту 3DES теперь предпочтительнее для большинства решений –

ответ

1

Текущая практика требует шифрования 3DES быть, возможно, с двойным ключом длиной.

+0

спасибо огромное @zaph, у меня есть я поднял вопрос, и я получил журнал ошибок выше (предоставленный мне человеком, помогающим контролировать транзакции с моего конца), я искренне ценю ваше время. –