Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Внизopenssl rsa –in enc.key -out dec.key в CriptoAPI Delphi Найти похожие ветки
← →
sniknik © (2012-09-18 20:56) [0]Что делает вот эта команда?
openssl rsa –in enc.key -out dec.key
Enter pass phrase for enc.key: -> Enter passphrase and hit return
writing RSA key
В смысле, понимаю, что она раскодирует файл приватного ключа - enc.key сохраняя в dec.key без пароля... но нужно то же самое повторить на CriptoAPI и желательно на Delhi (автоматизировать процесс).
На PHP делается просто в одну функцию openssl_private_decrypt, на дельфи/api (нагуглил) вроде тоже - CryptDecrypt, но в предварительных действиях что-то запутался (да и пишут везде про сессионный ключ а не приватный)... получаемый файл прога "не жрет", ошибка типа "неправильный последовательность SHA1" (завтра могу точнее, если "вдруг").
В общем нужно повторить сабж на дельфи.
Статьи не приветствуются... много прочел (например http://www.rsdn.ru/article/crypto/usingcryptoapi.xml#E6NAC ), понял мало. Если только с конкретным примером, по конкретному действию. Мало толку от описаний если логика/что за чем следует не понятна...
← →
Eraser © (2012-09-18 21:09) [1]
> sniknik © (18.09.12 20:56)
в MS Crypto API вообще не принято взаимодействовать напрямую с закрытым ключом. Да и вообще все операции с открытым/закрытым ключами сводятся к импорту/экспорту сессионного ключа, далее работа уже идет с ним.
← →
Медвежонок Пятачок © (2012-09-18 21:23) [2]в криптоапи приват ключ в чистом виде не получить насколько я помню.
можно экспортировать в транспортный контейнер. но он тоже обязательно шифруется. и это причем не сам ключ а именно контейнер ключа.
← →
sniknik © (2012-09-18 21:24) [3]> далее работа уже идет с ним.
Мне не нужна "работа", мне нужна получить файл со "снятым паролем" (пароль естественно известен).
Также(? в принципе не важно)/в том же виде, что после "openssl rsa –in enc.key -out dec.key", он то как то делает...
Если не "MS Crypto API" то чем-то другим, в принципе тоже не важно, главное программно (вызовом openssl не пойдет... есть причины, не будем заострять на них внимание).
← →
sniknik © (2012-09-18 21:30) [4]> в криптоапи приват ключ в чистом виде не получить насколько я помню.
Может поэтому все мои "переводы" с С++ криво работают?
Хотя вот, пишут, можно (по PHP-шной функции сужу, там оно парами) -
http://pumka.net/2009/12/16/rsa-encryption-cplusplus-delphi-cryptoapi-php-openssl-2/
Decrypting
To decrypt data you need first to split it into chunks of ByteLength bytes, decrypt each chunk and then concatenate decrypted chunks.
C++/CryptioAPI:
← →
Eraser © (2012-09-18 22:53) [5]
> sniknik © (18.09.12 21:24) [3]
я просто не в курсе, как оно там в openssl сделано и какую роль играет в данном случае пароль. Но судя по всему, шифрование файла ключа не имеет отношение непосредственно к RSA и обмену открытыми и секретным ключами. просто как доп. защита.
поясни какова задача и что находится в enc.key и должно находиться в dec.key. просто каким боком пароль имеет отношение к RSA, там обычно случайные ключи, пароли не фигурируют.
← →
sniknik © (2012-09-18 23:25) [6]> Но судя по всему, шифрование файла ключа не имеет отношение непосредственно к RSA и обмену открытыми и секретным ключами. просто как доп. защита.
Не согласен, по моему как раз паролем он и "шифруется", а после заворачивается в base64. Иначе зачем openssl просит ввести пароль? И кстати работает это в отрыве от всего, от машины где его генерировали, от сертификата, там его просто нет, т.е. есть только файл приватного ключа, утилита и введенный пароль... Т.е. явно не дополнительная "навеска". Но да ладно, не суть.
> поясни какова задача и что находится в enc.key
Моя задача получить dec.key... дальнейшее не ко мне, но для информации, этот dec.key после вместе с сертификатом "скармливают" одной проге и она работает, и пароля не просит (и не умеет).
А находится, для наглядности, пример "as is" -
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,178EDC55173B627D
uBUyfcEJukNIZOPCHNLVts0q/nRfvI3NTzfTEGZi1nWk9pT2sJwM1jwSQfXd6NaI
6dSlZ9ekNkVTvKmkVHFqhitL3mKhr90MmNes+jYC5FykZrbe0ssQ6ZAK1iCCpWtI
65zXpGtTj+iugdk/8vFSD6k+KXN6SXkJTTM6QR0O9C1C9ajuCpsJiSq+3+BerlMj
A7OoSRqp8GRw6EJ5cKmgQawaDnX9+6w37RwT61Vc2j0395jPL/2hflETa2P5kbMs
6GH9lCETkzYcCbfXEMMzkvJoxYEIVPbjMnMf4Upq8l/8mc7yLwxfSqF5eKQ5IBoZ
1Ne6957Zcqtc19nFmNGPCNdVPl3wZ0vMCYnz7BYUYwGmqKKFiZddUbPJJRA38hmz
9hpyM8RV46CyczVdCQ9qaxdPRDIYQrCYHnBuFlHfwpSgrO6627d7pXtsfIC/+bGw
aTymNaUD4otS5/abId883VR2mPSH4jOs294SV0nubRSqQLFcTNEtyslBu0kXBU+g
Nk5UUCScfqzk2/s5/uIxr7qc2qFJ/aJmwKcg6bSxiJA/jLHzlVRXLVVDsgbyK7er
JhlYHv8ltLZh6Xo3GS0YWhFkUxu3TJ5sz/+MQtdzIgU0SatEnbwKOBXoah0aYm0S
QJSG0tXs7IXO5ue+703nOr96uf1T9GHVvW+Tc/HntLf4Dbxs2G1yvG6cyCsIKX07
IHzXVCP0uyL76dhzGj964zaEFXHteRhCuUI1nEVR3trHp/sXEPQ57alX48ehbm/A
1JspiyaTsuS5jD0GXKR9PV041RkKDRmiqt3LgcbbhiLcDQeIpaqKWQ==
-----END RSA PRIVATE KEY-----
← →
sniknik © (2012-09-18 23:27) [7]+
> Proc-Type: 4,ENCRYPTED
> DEK-Info: DES-EDE3-CBC,178EDC55173B627D
Этого иногда не бывает, и это ни на что не влияет, т.е. важен только блок base64.
← →
Eraser © (2012-09-18 23:47) [8]
> sniknik © (18.09.12 23:25) [6]
> Не согласен, по моему как раз паролем он и "шифруется",
> а после заворачивается в base64. Иначе зачем openssl просит
> ввести пароль? И кстати работает это в отрыве от всего,
> от машины где его генерировали, от сертификата, там его
> просто нет, т.е. есть только файл приватного ключа, утилита
> и введенный пароль... Т.е. явно не дополнительная "навеска".
> Но да ладно, не суть.
вот допустим зашли на любой сайт с https - там что, просят ввести пароль что-ли? шифрование ключа паролем это уже довес к RSA. тогда вопрос такой - откуда берется enc.key? какова процедура его получения?
← →
Eraser © (2012-09-18 23:59) [9]Т.е. задача напрямую к RSA отношения не имеет.
Нужно просто расшифровать ключ.
Для этого не обязательно использовать CryptoAPI даже, думаю хватит компонентов LockBox (компонент TLb3DES). Для работы с base64 лучше всего Indy.
← →
sniknik © (2012-09-19 00:10) [10]> какова процедура его получения?
Меня это не интересует. Опять таки, чисто для информации, приходит по почте... (и не надо про безопасность и т.д., и про https тоже не надо, это "отвлечения внимания" т.к. нет там https, и безопасности как таковой нет... сертификат используется для подписи и идентификации данных, идентификации клиента, внутри локальной сети, а получают его клиенты у себя, и посылают нам, вместе с паролем).
Вообще, можешь вон выше из [6] скопировать текстом, переименовать в enc.key, и считать, что тоже "получил"... а после выполнить утилиту (если нету/не знаешь где скачать могу выслать) с приведенными параметрами, получишь нужный мне результат, файл - dec.key. Ну, естественно если будешь знать супер секретный пароль, вот этот - 12345.
← →
Eraser © (2012-09-19 00:18) [11]
> sniknik © (19.09.12 00:10) [10]
еще глянь в сторону http://msdn.microsoft.com/en-us/library/windows/desktop/aa382046(v=vs.85).aspx
по ключу позже отпишусь.
← →
sniknik © (2012-09-19 00:31) [12]> думаю хватит компонентов LockBox (компонент TLb3DES).
Скачал версию для D7 (LB 2.07 13-Sep-2012 SourceOnly.zip) вроде...
Не ставил, но код просмотрел, ключ используетсяTKey128 = array [0..15] of Byte;
TLb3DES = class(TLbSymmetricCipher)
protected {private}
FKey : TKey128;
public {methods}
16 байт... а бывают и больше. Т.е. вряд ли хватит.
← →
Eraser © (2012-09-19 00:31) [13]
> sniknik © (19.09.12 00:10) [10]
скинь plz расшифрованный файлик, т.е. dec.key, чтобы было с чем сравнить.
← →
Eraser © (2012-09-19 00:32) [14]
> sniknik © (19.09.12 00:31) [12]
пароль это другое, это не ключ.
← →
sniknik © (2012-09-19 00:34) [15]> еще глянь в сторону http://msdn.microsoft.com/en-us/library/windows/desktop/aa382046(v=vs.85).aspx
OоOо... такого я уже "вагон" просмотрел. И тут кстати даже не упоминается "волшебной" функции CryptDecrypt... на которую у меня самые большие надежды. :)
← →
sniknik © (2012-09-19 00:38) [16]> скинь plz расшифрованный файлик, т.е. dec.key, чтобы было с чем сравнить.
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCrvx7LHNqT7oZMPtz+BZi1p/1w1FCvAsyeYf26LkHphGpLqbiF
uf3URfGRs+yXa5Qfu99uu8yRycz9l7dQq/J1UO5cHdBUK/GEYDEkRdWV+vkLR+TJ
67VpPnmSCDO0loGLpwbPXi5jJ4qhI5f0Kixcjc813AXrogWNHEuwFyaG+wIDAQAB
AoGAYpZPIuDpR8nAJbxgNyEXTA+mmEIIHq5IrxIpB9rN0zJDojNGzNy7LEMKLE1Q
HouOd7jsxS/gej+RAHE6tYA+qM/LcEG8A6rV5z/EbHCtswBcONPRUkmbeqWYfuma
zzMfoYdh7nJaHN+bB6KeNqgw1xSfdOIja9HFK3qVxJoY2yECQQDjV6GWhKYHpm1l
igconG9MXpLnX9cxZlw8k9inpYMQdyFjRp9lz7YH8A9y2Yk91zbGclADWVKJ9A6l
4AFE8hXdAkEAwWVoC5SzZyk93U/0jKw80yMoppFfiBqY07YrCCJz9BHzUmYGE82n
277+ec1aP5nF5sjCO3qp/UAV3AXVM50etwJBAN6H6p3BHhui5rZbk4JHDhK9CCL/
B09NmL+bIJmJQ2+cjMv2VxR7avz+GMEc+l/UB8PcJUIB7u8mPChVyihIpukCQDpd
IhMsox+k4JijgofZitmlKKVsBcqLTEfIGCByVU/5AteBFqBvVhMJBr83a975xzGo
sIVGtXpKFs65q+fRqO0CQBm0KuLXRoXJB3CZMOFLTfMZfSs3SyIXHl2k/YPYMiIx
lBzMsOW2h8Ha+9SAJaZy7PmdlPK+Vc2FjrtpbdzS+Yk=
-----END RSA PRIVATE KEY-----
> пароль это другое, это не ключ.
Ну, типа я не в курсе... но к примеру прямо сегодня был пароль 18 символов, набирать устанешь. В "твой" компонент не влезет, не говоря про ключ 1024 байта вроде? Ну +-.
← →
sniknik © (2012-09-19 00:43) [17]> В "твой" компонент не влезет
В нем FKey : TKey128; это судя по всему пароль, не смотря на названиеprocedure TLb3DES.SetKey(const Key : TKey128);
begin
FKey := Key;
end;
function TLb3DES.DecryptString(const InString : string) : string;
begin
case CipherMode of
cmECB : Result := TripleDESEncryptStringEx(InString, FKey, False);
cmCBC : Result := TripleDESEncryptStringCBCEx(InString, FKey, False);
end;
end;
← →
Eraser © (2012-09-19 00:54) [18]
> sniknik © (19.09.12 00:43) [17]
не, пароль это вотprocedure TLb3DES.GenerateKey(const Passphrase : AnsiString);
вот алгоритм генерации ключа по паролю вызывает вопросы. такой ли он как в исходном примере...
← →
Eraser © (2012-09-19 01:30) [19]вот нарыл алгоритм формирования [0] на php
отсюда http://phpseclib.sourceforge.net/rsa/examples.html
кое что прояснилось, в частности алгоритм формирования пароля/ключа.default: // eg. CRYPT_RSA_PRIVATE_FORMAT_PKCS1
$components = array();
foreach ($raw as $name => $value) {
$components[$name] = pack("Ca*a*", CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($value)), $value);
}
$RSAPrivateKey = implode("", $components);
if ($num_primes > 2) {
$OtherPrimeInfos = "";
for ($i = 3; $i <= $num_primes; $i++) {
// OtherPrimeInfos ::= SEQUENCE SIZE(1..MAX) OF OtherPrimeInfo
//
// OtherPrimeInfo ::= SEQUENCE {
// prime INTEGER, -- ri
// exponent INTEGER, -- di
// coefficient INTEGER -- ti
// }
$OtherPrimeInfo = pack("Ca*a*", CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($primes[$i]->toBytes(true))), $primes[$i]->toBytes(true));
$OtherPrimeInfo.= pack("Ca*a*", CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($exponents[$i]->toBytes(true))), $exponents[$i]->toBytes(true));
$OtherPrimeInfo.= pack("Ca*a*", CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($coefficients[$i]->toBytes(true))), $coefficients[$i]->toBytes(true));
$OtherPrimeInfos.= pack("Ca*a*", CRYPT_RSA_ASN1_SEQUENCE, $this->_encodeLength(strlen($OtherPrimeInfo)), $OtherPrimeInfo);
}
$RSAPrivateKey.= pack("Ca*a*", CRYPT_RSA_ASN1_SEQUENCE, $this->_encodeLength(strlen($OtherPrimeInfos)), $OtherPrimeInfos);
}
$RSAPrivateKey = pack("Ca*a*", CRYPT_RSA_ASN1_SEQUENCE, $this->_encodeLength(strlen($RSAPrivateKey)), $RSAPrivateKey);
if (!empty($this->password)) {
$iv = $this->_random(8);
$symkey = pack("H*", md5($this->password . $iv)); // symkey is short for symmetric key
$symkey.= substr(pack("H*", md5($symkey . $this->password . $iv)), 0, 8);
if (!class_exists("Crypt_TripleDES")) {
require_once("Crypt/TripleDES.php");
}
$des = new Crypt_TripleDES();
$des->setKey($symkey);
$des->setIV($iv);
$iv = strtoupper(bin2hex($iv));
$RSAPrivateKey = "-----BEGIN RSA PRIVATE KEY-----\r\n" .
"Proc-Type: 4,ENCRYPTED\r\n" .
"DEK-Info: DES-EDE3-CBC,$iv\r\n" .
"\r\n" .
chunk_split(base64_encode($des->encrypt($RSAPrivateKey))) .
"-----END RSA PRIVATE KEY-----";
} else {
$RSAPrivateKey = "-----BEGIN RSA PRIVATE KEY-----\r\n" .
chunk_split(base64_encode($RSAPrivateKey)) .
"-----END RSA PRIVATE KEY-----";
}
return $RSAPrivateKey;
}
← →
sniknik © (2012-09-19 08:10) [20]> "DEK-Info: DES-EDE3-CBC,$iv\r\n"
хм. Похоже эта часть тоже важна, раз участвует в шифрации, то по логике и для обратного действия должна использоваться, а там - sniknik © (18.09.12 23:27) [7] значит ошибался... Т.е. получается если нет заголовка то "обратная расшифровка" попросту ничего не делает. А в найденных примерах насколько помню ее "режут" (используется функция CryptStringToBinary с параметром CRYPT_STRING_BASE64HEADER).
← →
Дмитрий С © (2012-09-19 12:23) [21]А таскать с собой DDL-ку openssl-а не хочешь?
← →
sniknik © (2012-09-19 14:36) [22]Не особо, но как крайний вариант пойдет. Можешь сконвертировать на libeay32?
← →
DVM © (2012-09-19 15:11) [23]
> sniknik ©
Посмотри вот тут:
http://pumka.net/2009/12/19/reading-writing-and-converting-rsa-keys-in-pem-der-publickeyblob-and-privatekeyblob-formats/
тут:
http://stackoverflow.com/questions/1231178/load-an-x509-pem-file-into-windows-cryptoapi
и вообще ищи по словосочетанию
pem file decrypt CryptAPI
Твой файл имеет формат PEM несмотря на неверное расширение
← →
DVM © (2012-09-19 15:32) [24]
> Твой файл имеет формат PEM несмотря на неверное расширение
Хотя нет, у CryptoAPI есть отдельно key файлы, вот тут еще про них
http://en-us.sysadmins.lv/Lists/Posts/Post.aspx?List=332991f0-bfed-4143-9eea-f521167d287c&ID=46
← →
sniknik © (2012-09-19 15:42) [25]> и вообще ищи по словосочетанию
> pem file decrypt CryptAPI
Как только не искал... ссылок "выше головы", могу сам их распространять... к примеру
http://stackoverflow.com/questions/7573754/how-to-use-cryptoapi-and-cryptimportkey-with-a-asn-1-pem-openssl-public-key
Только вот перевод этого(как и другого) не работает.
И кстати функция CryptStringToBinaryA (если переводить по приведенной ссылке) в JwaWinCrypt неправильно описана (а wcrypt2 практически весь "кривой" :))
← →
sniknik © (2012-09-19 15:57) [26]> Посмотри вот тут:
> http://pumka.net/2009/12/19/reading-writing-and-converting-rsa-keys-in-pem-der-publickeyblob-and-privatekeyblob-formats/
Кстати вот это работает... НО!!! Тут работают с
-----BEGIN RSA PRIVATE KEY-----
MIIBOwI...
"чистым", не зашифрованным ключем, т.е. как раз тем - sniknik © (19.09.12 00:38) [16] который мне нужно получить (префикс как показатель, можно сравнить...)
Если же дать исходный файл, то - "System Error. Code: -2146881269."#$D#$A"Встречено неверное значение тега ASN1". И т.д. примеры в основном такие, "для готового".
← →
DVM © (2012-09-19 15:58) [27]
> sniknik © (19.09.12 15:42) [25]
Я так понял тебе надо найти реализацию алгоритма шифрования (точнее дешифрования) с названием DES-EDE3-CBC (именно так, а не, скажем DES-CBC) и с его помощью расшифровать результат работы функции CryptStringToBinaryA.
← →
DVM © (2012-09-19 16:01) [28]
> sniknik ©
OpenSSL поддерживает еще такие методы шифрования DES:
des
des-cbc
des-cfb
des-ecb
des-ede
des-ede-cbc
des-ede-cfb
des-ede-ofb
des-ede3
des-ede3-cbc
des-ede3-cfb
des-ede3-ofb
des-ofb
des3
desx
и теоретически там может быть любой из них. И не только DES.
← →
DVM © (2012-09-19 16:23) [29]
> DES-EDE3-CBC
DES-EDE3 - это фактически 3DES, самый распространенный вариант его,
CBC - это его режим (про режимы тут http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%B6%D0%B8%D0%BC_%D1%88%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)
CryptoApi вроде бы умеет с этим типом шифрования работать.
← →
sniknik © (2012-09-19 17:02) [30]> с названием DES-EDE3-CBC (именно так, а не, скажем DES-CBC) и с его помощью расшифровать результат работы функции CryptStringToBinaryA.
Только результат того как по идее эта функция должна возвращать...
А возвращает она по факту только первые 3 байта... почему то. это для файла с Proc-Type: 4,ENCRYPTED ... неважно какие параметры задавать - CRYPT_STRING_ANY(*CRYPT_STRING_BASE64HEADER*) и т.д. а вот если читать "чистый"(второй приведенный) то все ок.
Т.е. нужно самому выделить и перегнать в бинарные base64 часть. Дальше ее обработать используя введенный пароль + часть из DEK-Info: DES-EDE3-CBC,178EDC55173B627D, сняв таким образом пароль... завернуть получившееся опять в base64 и сохранить.
++
> А таскать с собой DDL-ку openssl-а не хочешь?
> Не особо, но как крайний вариант пойдет. Можешь сконвертировать на libeay32?
Уже не нужно, решил на компоненте SecureBlackbox... очень просто ;), даже не понятно почему в инете не нашел такого решения.
Но решение на CriptoApi не помешало бы...
Решение:function LoadBinaryFromCert(const FileName, Passw: string): string;
var
Stream: TFileStream;
sHeader, Buf1, Buf2: string;
Size1, Size2: integer;
begin
Stream:= TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone);
try
Stream.Position:= 0;
Size1:= Stream.Size;
SetLength(Buf1, Size1);
Stream.ReadBuffer(Buf1[1], Size1);
Size2:= Size1;
SetLength(Buf2, Size2);
if SBPEM.Decode(@Buf1[1], Size1, @Buf2[1], Passw, Size2, sHeader) <> 0 then
raise Exception.Create("Неверный файл. Не удается декодировать ""+FileName+ """);
result:= Copy(Buf2, 1, Size2);
finally
Stream.Free;
end;
end;
Результат функции завернуть в base64 (EncdDecd.EncodeString()) и сохранить "бутербродом" между
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
в файл... готово.
Кстати странность, 3 байт с начала последовательности отличается от того что делает openssl... но тем не менее работает!!!
p.s. Чем не понятнее, тем безопаснее! ...
← →
Eraser © (2012-09-19 18:05) [31]
> DVM © (19.09.12 15:11) [23]
>
> > sniknik ©
>
> Посмотри вот тут:
> http://pumka.net/2009/12/19/reading-writing-and-converting-
> rsa-keys-in-pem-der-publickeyblob-and-privatekeyblob-formats/
эх, как бы пригодилось мне эта ссылка, когда нужно было подружить ключи MS Crypto API с Java )
> sniknik © (19.09.12 17:02) [30]
хм, никогда не слышал об этих компонентах, тоже спасибо за ссылку, когда нибудь пригодится., ибо ручной парсинг всяких этих PKCS дело уж очень муторное, особенно по причине отсутствия вменяемой документации и примеров, в RFC там черт ногу сломит.
← →
Eraser © (2012-09-19 18:06) [32]
> sniknik © (19.09.12 17:02) [30]
> Но решение на CriptoApi не помешало бы...
ну если там исходник есть, то думаю не сложно заменить операцию шифрования 3Des"ом и хэширование на APIшные, только вот зачем.
← →
sniknik © (2012-09-19 18:26) [33]> ну если там исходник есть
Исходник есть... не установленный (с рутрекера), установлена ограниченная версия, только dcu. Перебивать установкой "левой" не хочу, но код смотрел/могу привести... завтра.
> только вот зачем.
Например "из спортивного интереса"... там с функциями хеша тоже какая то хрень... как и с CryptStringToBinaryA, Оно вроде работает, даже возвращает что-то, но как то не так как ожидалось.
(например там структура для расшифровки 24 байта, а хеш возвращает размер 192... в MSDN написано, что структура считается в битах (т.е. 192 / 8 = 24), ок... но если дать буфер ровно 24 байта вылетает AV. если 192 байта, не бита, то заполняется вся... спрашивается почему? в общем дело ясное что дело темное, так до сих пор ничего и не понятно. ;(, все естественно по переведенным примерам из инета, и там оно вроде работает??? чтобы писать самому все таки знаний по теме не достаточно)
← →
Eraser © (2012-09-19 18:35) [34]
> sniknik © (19.09.12 18:26) [33]
> Исходник есть... не установленный (с рутрекера), установлена
> ограниченная версия, только dcu. Перебивать установкой "левой"
> не хочу, но код смотрел/могу привести... завтра.
я бы сделал так - посмотрел как реализован разбор PKCS в этом исходнике и переписал, например, на бесплатных LockBox или даже лучше на http://www.cityinthesky.co.uk/opensource/DCPcrypt
вчера глянул по [19] - сходу не вышло, уж больно это мудреная запись$symkey = pack("H*", md5($this->password . $iv)); // symkey is short for symmetric key
$symkey.= substr(pack("H*", md5($symkey . $this->password . $iv)), 0, 8);
особенно pack, а разбираться лезть - это уж нужен спортивный интерес )
исходник на делфи сильно упростит задачу.
> MSDN написано
да, с CryptoAPI главная проблема - это их форматы хранения и представления ключей, хэшей и т.п. Все рассчитано на работу с условными BLOB"ами в их формате и дескрипторами.
← →
sniknik © (2012-09-19 20:24) [35]> исходник на делфи
Брал здесь
http://rutracker.org/forum/viewtopic.php?t=647901
SBPEM.Decode
это имя модуля. Не дружишь с торентами, могу кинуть на почту (если только исходники модулей не так много будет).
> сильно упростит задачу.
Не думаю, то что там сделано, все по своему, со своими константами/параметрами, могло бы упростить если бы была цель написать также... а вот когда понимаешь, что вот тут нужен хеш мд5 в 8 байт 3 раза, а API-шная функция принимает(и по примерам) это за раз, и вроде как должно сконвертить, а вместо этого дает неопределенный результат... как то мало помогает.
← →
Eraser © (2012-09-19 23:08) [36]
> sniknik © (19.09.12 20:24) [35]
ога, спасиб, с торрентами ой как дружу )
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.59 MB
Время: 0.088 c