|
|
|
Convert BLOB(Oracle) to hex String (Java)
|
|||
|---|---|---|---|
|
#18+
дорабатываю механизм цифровой подписи. Данные и подписи хранятся в базе, общение с криптосервером в Java. Подпись хранится в таблице в виде BLOB поля. В утрированном виде логика такая: Отдаю блок данных на подпись и Java код, выполнив необходимые провекри и подписав его следующим блоком записывает подпись в базу String query = "INSERT INTO SIGNS (SIGN) VALUES (?)"; PreparedStatement statement = null; statement = this.tools.prepareStatement(query); statement.setString(1, signature); statement.executeUpdate(); Позднее мне нужно проверить подпись и я зову процедуру, объявленную в Oracle следующим образом procedure VerifySign (signature in BLOB, certificate out varchar2) as language java name 'verifySign (oracle.sql.BLOB, java.lang.String[])'; В Java в функции verifySign необходимо (по определенным причинам) BLOB перевести в String Делаю это следующим образом: String Signature; byte[] ArrSign = BLOBsignature.getBytes(); char[] val = new char[2 * ArrSign.length]; final char[] hexTemplate = "0123456789ABCDEF".toCharArray(); for (int i = 0; i < ArrSign.length; i++) { int b = ArrSign[i] & 0xff; val[2 * i] = hexTemplate[b >>> 4]; val[2 * i + 1] = hexTemplate[b & 0x0F]; } Signature = String.valueOf(val); Проблема всего этого в том, что подпись после того как криптосервер ее положил в базу выглядит примерно так (начало): 308203DB06092A864886F7... А после того, как я ее преобразую из BLOB в String в начало дописывается какой-то код: 04430001010C080000010000000100000326059E00045EEC00045EEB0008000800000001308203DB06092A864886F70D00000000031DB52400000002000800003101014009FA1A9A3200000000045EEB05C002A5000003EF09000000000003DF000000000001 Что я делаю неправильно? Что это префикс к подписи и как от него избавится? Может это локатор дописывается в начало самого блоба, но это странно, раз уж все равно передаем его целиком через параметр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2016, 07:01 |
|
||
|
Convert BLOB(Oracle) to hex String (Java)
|
|||
|---|---|---|---|
|
#18+
Hoiдорабатываю механизм цифровой подписи. Данные и подписи хранятся в базе, общение с криптосервером в Java. Подпись хранится в таблице в виде BLOB поля. В утрированном виде логика такая: Отдаю блок данных на подпись и Java код, выполнив необходимые провекри и подписав его следующим блоком записывает подпись в базу String query = "INSERT INTO SIGNS (SIGN) VALUES (?)"; PreparedStatement statement = null; statement = this.tools.prepareStatement(query); statement.setString(1, signature); statement.executeUpdate(); Позднее мне нужно проверить подпись и я зову процедуру, объявленную в Oracle следующим образом procedure VerifySign (signature in BLOB, certificate out varchar2) as language java name 'verifySign (oracle.sql.BLOB, java.lang.String[])'; В Java в функции verifySign необходимо (по определенным причинам) BLOB перевести в String Делаю это следующим образом: String Signature; byte[] ArrSign = BLOBsignature.getBytes(); char[] val = new char[2 * ArrSign.length]; final char[] hexTemplate = "0123456789ABCDEF".toCharArray(); for (int i = 0; i < ArrSign.length; i++) { int b = ArrSign[i] & 0xff; val[2 * i] = hexTemplate[b >>> 4]; val[2 * i + 1] = hexTemplate[b & 0x0F]; } Signature = String.valueOf(val); Проблема всего этого в том, что подпись после того как криптосервер ее положил в базу выглядит примерно так (начало): 308203DB06092A864886F7... А после того, как я ее преобразую из BLOB в String в начало дописывается какой-то код: 04430001010C080000010000000100000326059E00045EEC00045EEB0008000800000001308203DB06092A864886F70D00000000031DB52400000002000800003101014009FA1A9A3200000000045EEB05C002A5000003EF09000000000003DF000000000001 Что я делаю неправильно? Что это префикс к подписи и как от него избавится? Может это локатор дописывается в начало самого блоба, но это странно, раз уж все равно передаем его целиком через параметр. Используй теги, а то ничего не понятно: дорабатываю механизм цифровой подписи. Данные и подписи хранятся в базе, общение с криптосервером в Java. Подпись хранится в таблице в виде BLOB поля. В утрированном виде логика такая: Отдаю блок данных на подпись и Java код, выполнив необходимые провекри и подписав его следующим блоком записывает подпись в базу Код: sql 1. 2. 3. 4. 5. Позднее мне нужно проверить подпись и я зову процедуру, объявленную в Oracle следующим образом Код: sql 1. 2. 3. 4. В Java в функции verifySign необходимо (по определенным причинам) BLOB перевести в String Делаю это следующим образом: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Проблема всего этого в том, что подпись после того как криптосервер ее положил в базу выглядит примерно так (начало): 308203DB06092A864886F7... А после того, как я ее преобразую из BLOB в String в начало дописывается какой-то код: 04430001010C080000010000000100000326059E00045EEC00045EEB0008000800000001308203DB06092A864886F70D00000000031DB52400000002000800003101014009FA1A9A3200000000045EEB05C002A5000003EF09000000000003DF000000000001 Что я делаю неправильно? Что это префикс к подписи и как от него избавится? Может это локатор дописывается в начало самого блоба, но это странно, раз уж все равно передаем его целиком через параметр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2016, 08:55 |
|
||
|
Convert BLOB(Oracle) to hex String (Java)
|
|||
|---|---|---|---|
|
#18+
Спасибо. Учту. Опытным путем выяснил, что если перевод из BLOB в byte[] делать так: Код: java 1. то все работает нормально. Видать getBytes() делает что-то дополнительное с блобом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2016, 09:21 |
|
||
|
Convert BLOB(Oracle) to hex String (Java)
|
|||
|---|---|---|---|
|
#18+
Истина оказалась где-то рядом... В итоге написал так: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2017, 07:18 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39216283&tid=1885553]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
161ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
39ms |
get tp. blocked users: |
2ms |
| others: | 223ms |
| total: | 466ms |

| 0 / 0 |
