Нужен скрипт по преобразованию файла закладок Opera Presto (Opera 12) из bookmarks.adr в bookmarks.html. Если возможно, штатными средствами Windows с гибридом командной строки или с помощью сторонней утилиты sed.
В Opera Presto есть механизм ручного экспорта закладок как html, однако ищется вариант с экспортом в html в автоматическом режиме.
sov44, Вам однократно сие потребно или нужен программный код для какого-то проекта?
Iska, всё верно, это не большой тестовый проект OperaPresto_Pass_Converter (https://yadi.sk/d/OzPHDkvQzTqVQ) на sed для пользователей, желающих мигрировать с Opera Presto на Mozilla. С кодом sed мне помог YuS_2 http://www.cyberforum.ru/cmd-bat, за что ему большое спасибо. На сегодняшний день OperaPresto_Pass_Converter позволяет конвертировать логины и пароли из wand.dat в wand_mozilla.xml - шаблон расширения Password Exporter, который затем можно интегрировать в Mozilla Firefox, импорт\экспорт закладок приходится делать вручную. Хочется верить, что этот проект будет востребован, т.к ни конвертера логинов и паролей, ни конвертера закладок в сети не нашел, самому приходилось мигрировать через бумажку.
sov44, спасибо, ясно.
Ну, конвертер вроде как есть: The Bookmark Converter Homepage (http://www.magnusbrading.com/bmc/), но shareware. Также можно конвертировать старый профиль в новую Opera, там выгрузить их в html, затем импортировать.
Iska, попробовал The Bookmark Converter на Win7x32, не работает. Хотелось бы найти универсальное решение на скриптовом языке.
sov44, Вы же писали, что Вам же вроде как сделали, не? Кстати, стоит давать ссылку на конкретную тему/сообщение.
greg zakharov
30-11-2016, 10:19
Любопытно стало после:
...позволяет конвертировать логины и пароли из wand.dat...
wand.dat - файл с соленой криптографией, как-то начинал разработку его декодирования, но виду того, что Opera, ровно как PowerShell, использует относительно малый процент (имеется в виду постсоветское пространство), интерес к дальнейшей разработке отпал. В инете же кое-где можно все еще найти черновые варианты, например:
[Byte[]]$salt = 0x83, 0x7D, 0xFC, 0x0F, 0x8E, 0xB3, 0xE8, 0x69, 0x73, 0xAF, 0xFF
$path = [Environment]::GetFolderPath("ApplicationData") + "\Opera\Opera\wand.dat"
function Read-RawData([Byte[]]$key, [Byte[]]$enc) {
$md5 = New-Object Security.Cryptography.MD5CryptoServiceProvider
[Byte[]]$buff = New-Object "Byte[]" ($salt.Length + $key.Length)
[Array]::Copy($salt, $buff, $salt.Length)
[Array]::Copy($key, 0, $buff, $salt.Length, $key.Length)
[Byte[]]$hash1 = $md5.ComputeHash($buff)
[Byte[]]$buff = New-Object "Byte[]" ($hash1.Length + $salt.Length + $key.Length)
[Array]::Copy($hash1, $buff, $hash1.Length)
[Array]::Copy($salt, 0, $buff, $hash1.Length, $salt.Length)
[Array]::Copy($key, 0, $buff, ($hash1.Length + $salt.Length), $key.Length)
[Byte[]]$hash2 = $md5.ComputeHash($buff)
$des = New-Object Security.Cryptography.TripleDESCryptoServiceProvider
$des.Mode = [Security.Cryptography.CipherMode]::CBC
$des.Padding = [Security.Cryptography.PaddingMode]::None
[Byte[]]$trk = New-Object "Byte[]" 24
[Byte[]]$IV = New-Object "Byte[]" 8
[Array]::Copy($hash1, $trk, $hash1.Length)
[Array]::Copy($hash2, 0, $trk, $hash1.Length, 8)
[Array]::Copy($hash2, 8, $IV, 0, 8)
$des.Key = $trk
$des.IV = $IV
[Security.Cryptography.ICryptoTransform]$dec = $des.CreateDecryptor()
return [Text.Encoding]::Unicode.GetString($dec.TransformFinalBlock($enc, 0, $enc.Length))
}
try {
[Byte[]]$wand = [IO.File]::ReadAllBytes($path)
[Int32]$block = 0
[String[]]$raw = ""
$cat = [Enum]::GetValues([Globalization.UnicodeCategory])
for ($i = 0; $i -lt $wand.Length; $i++) {
if ($wand[$i] -eq 0x0 -and $wand[$i + 1] -eq 0x0 -and `
$wand[$i + 2] -eq 0x0 -and $wand[$i + 3] -eq 0x8) {
[Int32]$block = $wand[$i + 15]
[Byte[]]$key = New-Object "Byte[]" 8
[Byte[]]$enc = New-Object "Byte[]" $block
[Array]::Copy($wand, ($i + 4), $key, 0, $key.Length)
[Array]::Copy($wand, ($i + 16), $enc, 0, $enc.Length)
$raw += (Read-RawData $key $enc)
$i += 11 + $block
}
}
if ($raw.Length -ne 0) {
for ($i = 0; $i -lt $raw.Length; $i++) {
if ($raw[$i] -match "@") {
Write-Host $raw[$i].Split([Char]0x0)[0] -fo Green
Write-Host $(-join ($raw[$i + 1].ToCharArray() | % {
$chr = [Char]::GetUnicodeCategory($_)
if ($chr -ne $cat[0] -and $chr -ne $cat[($cat.Length - 1)]) {
$_
}
})) -fo Yellow
""
}
}
}
}
catch [IO.FileNotFoundException] {
$_.Exception.Message
}
Что же касается конвертирования закладок, насколько помню Opera вполне сама может конвертировать adr в html, и вроде бы какие-то параметры комстроки у нее были... в принципе, можно конвертнуть и с помощью PowerShell и иже с ним, но проект, если быть предельно объективным, не стоит того, чтобы тратить на него столько усилий, дабы убедиться в небольшом проценте пользователей FF и древней Opera. Как ни крути, но подавляющее большинство налегает на "хромоногие" браузеры.
Вам же вроде как сделали, не? »
Нет. Иначе стал-бы я создавать тему?
и вроде бы какие-то параметры комстроки у нее были... »
А вот это было-бы интересно.
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.