Congratulations!

[Valid Atom 1.0] This is a valid Atom 1.0 feed.

Recommendations

This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

Source: https://canalqb.blogspot.com/atom.xml

  1. <?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5982274115355506187</id><updated>2025-08-02T12:50:22.738-03:00</updated><category term="Python"/><category term="&quot;Criptomoedas e Financeiro&quot;"/><category term="Airdrops"/><category term="CanalQb no Youtube"/><category term="Blockchain"/><category term="Exchange"/><category term="mineração"/><category term="Linux"/><category term="Automação"/><category term="Telegram"/><category term="Renda Extra/Passiva"/><category term="Windows"/><category term="SEO para Blogger"/><category term="Tecnologia e Programação:"/><category term="OpenWrt"/><category term="Aplicativos e Ferramentas:"/><category term="Redes Sociais"/><category term="Selenium"/><category term="Console e Emuladores"/><category term="VB; VBS; VBA"/><category term="Culinária e Receitas"/><category term="Play-to-Earn"/><category term="Faucet"/><category term="Android"/><category term="Excel"/><category term="Banco de dados"/><category term="wallets"/><category term="Bitcoin"/><category term="Hype"/><category term="PHP"/><category term="VisualG"/><category term="Outros:"/><category term="lógica de programação"/><category term="Arquitetura de Computadores"/><category term="Servidor Web"/><category term="Batocera"/><category term="Ferramentas de Rede"/><category term="Stake - Apy - Apr"/><category term="Redes e Infraestrutura"/><category term="Ciência da Computação"/><category term="MSAccess"/><category term="Mineradoras e Hypes"/><category term="Node.js"/><category term="Power BI"/><category term="CashBack"/><category term="Faucets"/><category term="Airdrop do CanalQb"/><category term="Google Colab"/><category term="Pesquisas remuneradas"/><category term="Puzzle"/><category term="SQL/SQLITE/BD"/><category term="Tokens e Depins"/><category term="Aparelhos de TV"/><category term="#eunaosoucobaia"/><category term="Airdrop"/><category term="Android ADB Comandos"/><category term="Casa de Jogos"/><category term="Chromium"/><category term="FaucetPay"/><category term="Ferramentas para Linux"/><category term="Masternode"/><category term="NFT"/><category term="Segurança"/><category term="Tutoriais"/><category term="automacao"/><category term="API"/><category term="AngularJs"/><category term="Banco e Cartões"/><category term="C/C# Desenvolvimento"/><category term="Curriculo"/><category term="Google Search Console"/><category term="Google Sheets"/><category term="Impressoras"/><category term="JavaScript"/><category term="Linux;"/><category term="Monitoramento de rede"/><category term="OBS Studio"/><category term="Rever"/><category term="Servidor DLNA"/><category term="Testnets"/><category term="gerenciamento remoto"/><category term="inteligencia artificial"/><category term="Access"/><category term="Bíblicas"/><category term="Certificados FGV"/><category term="Certificados Google"/><category term="Ganhos com aplicativos"/><category term="Google Adsense"/><category term="Google Drive"/><category term="Inteligência Artificial"/><category term="Isos"/><category term="Jogos Play2Earn"/><category term="Marketing Digital"/><category term="Permissões"/><category term="SNMP"/><category term="Saúde Natural"/><category term="Torrent"/><category term="aplicativos de criptomoeda"/><category term="dropshipping"/><category term="e-commerce"/><category term="APR"/><category term="Aplicativo Boomco paga para você aprender coreano"/><category term="Aplicativos de Recompensa"/><category term="Aprendizado"/><category term="Automação; Linux; Selenium"/><category term="Certificados Senai"/><category term="ChatGPT"/><category term="Configuração de Servidores"/><category term="Dash"/><category term="DeFi"/><category term="Deep Learning com AMD"/><category term="Dicas"/><category term="Direitos Autorais e Proteção de Conteúdo"/><category term="Dogecoin"/><category term="Drivers e Hardware"/><category term="ESP32"/><category term="ESP8266"/><category term="Editores de Texto"/><category term="Eletricidade residencial"/><category term="Erros comuns"/><category term="Erros e Soluções"/><category term="Finanças Quantitativas"/><category term="Firebase"/><category term="Firmware NerdMiner"/><category term="Física e Criptomoedas"/><category term="Gateway de Pagamento"/><category term="Gerenciamento de TI"/><category term="Gestão de Atendimento"/><category term="Github"/><category term="Google Apps Script"/><category term="Google Cloud"/><category term="Hashtags"/><category term="Imagem e Vídeo"/><category term="Instalação Git e Go Linux"/><category term="Integração de Dados"/><category term="Java Regex"/><category term="Jogos PSP"/><category term="Jogos e Assinaturas"/><category term="Jogos para PC"/><category term="LDPlayer Android Emulador"/><category term="Lançamento de moedas"/><category term="Linux ChromeDriver"/><category term="Linux MK802"/><category term="Linux e Emuladores"/><category term="Linux e instalação de software"/><category term="Linux systemd comandos"/><category term="Litecoin"/><category term="Lote Bath"/><category term="MSWord"/><category term="Marketing de Afiliados"/><category term="Marternodes"/><category term="Matemática e Programação"/><category term="Media Center e Streaming"/><category term="Mercado Livre"/><category term="Microsoft Log Parser"/><category term="Monitoramento de Servidores Exchange"/><category term="NoSQL"/><category term="Office 365 gratuito; Parceria Microsoft Governo; Licença educacional"/><category term="OpenAI API"/><category term="OpenCL"/><category term="Optimism"/><category term="Otimização PC"/><category term="Outlook"/><category term="PHP no Servidor"/><category term="Preparação para provas"/><category term="Regedit"/><category term="Sistemas Antigos"/><category term="Sistemas Operacionais"/><category term="Visual Cut"/><category term="desafios-criptomoedas"/><category term="equipamentos-televisão"/><category term="estruturas de repetição"/><category term="jogos online"/><category term="memória computacional"/><category term="moeda digital; staking; criptomoedas; jogos blockchain"/><category term="terminologia"/><title type='text'>CanalQb - Scripts e Criptos</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='https://canalqb.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default?alt=atom'/><link rel='alternate' type='text/html' href='https://canalqb.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default?alt=atom&amp;start-index=26&amp;max-results=25'/><author><name>CanalQb</name><uri>http://www.blogger.com/profile/12641039126796028340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtt2Q0QwGuJ3OI0G29twmGKYmZvab5d8AV6fJd_HUdevW7fofyH2lDRAv39LAtg0A2x46Im5VwUT-1cfm0b4g7jgY9IKC_BbqqEV9bew_OhkddtGzaFlM4uL0LUeqS8nxK83Yufp3E6SOycslOyDA6O14vPpHRiPkTCSbb5H05NTE/s220/1QB.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>1836</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5982274115355506187.post-37861548795214681</id><published>2025-07-31T12:28:00.004-03:00</published><updated>2025-07-31T13:01:05.288-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Renda Extra/Passiva"/><title type='text'>20 Melhores Navegadores Antidetect: Gratuitos e Pagos</title><content type='html'>&lt;!--Linha de separação superior--&gt;
  2. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  3.  
  4. &lt;!--Link para o canal YouTube--&gt;
  5. &lt;p style=&quot;text-align: center;&quot;&gt;
  6.  &lt;a href=&quot;https://www.youtube.com/channel/UCdOA_1KzXHIp3gmVyyYv2sg&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot; title=&quot;Visite o @CanalQb no YouTube&quot;&gt;
  7.    &lt;span style=&quot;font-size: 1.2em; font-weight: bold;&quot;&gt;@CanalQb no YouTube&lt;/span&gt;
  8.  &lt;/a&gt;
  9. &lt;/p&gt;
  10.  
  11. &lt;!--Linha de separação inferior--&gt;
  12. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  13.  
  14. &lt;!--Imagem do canal--&gt;
  15. &lt;div style=&quot;margin: 20px 0px; text-align: center;&quot;&gt;
  16.  &lt;img alt=&quot;@CanalQb&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s2560/CanalQb.png&quot; style=&quot;border-radius: 10px; height: auto; max-width: 100%;&quot; /&gt;
  17. &lt;/div&gt;
  18.  
  19. &lt;h2 style=&quot;text-align: center;&quot;&gt;Os 20 Melhores Navegadores Antidetect Gratuitos e Pagos (Com Links Oficiais)&lt;/h2&gt;
  20.  
  21. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  22.  
  23. &lt;!--Vídeo incorporado--&gt;
  24. &lt;div style=&quot;margin-bottom: 30px; text-align: center;&quot;&gt;
  25.  &lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; height=&quot;450&quot; loading=&quot;lazy&quot; src=&quot;https://www.youtube.com/embed/g1dFzkx_SJA?autoplay=1&amp;amp;mute=1&amp;amp;origin=https://canalqb.blogspot.com/&amp;amp;controls=1&amp;amp;rel=0&amp;amp;enablejsapi=1&amp;amp;cc_load_policy=1&quot; title=&quot;Vídeo do @CanalQb&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;
  26. &lt;/div&gt;
  27. &lt;p style=&quot;color: red; font-weight: bold;&quot;&gt;
  28. Sempre crie uma frase de segurança única para jogos, testnets ou airdrops e evite usar sua carteira principal.
  29. &lt;/p&gt;
  30. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 80%;&quot; /&gt;
  31. &lt;br /&gt;
  32.  
  33. &lt;p&gt;Se você gerencia múltiplas contas em redes sociais, plataformas de anúncios ou sistemas de afiliados, sabe que o rastreamento digital pode ser um obstáculo. Navegadores antidetect surgem como uma solução poderosa para criar identidades virtuais únicas, simulando diferentes dispositivos, sistemas e locais.&lt;/p&gt;
  34.  
  35. &lt;p&gt;Este guia apresenta os &lt;strong&gt;20 melhores navegadores antidetect&lt;/strong&gt; disponíveis em 2025 — com opções gratuitas e pagas — todos otimizados para quem precisa de privacidade, gerenciamento de múltiplas contas ou automações complexas. Incluímos links oficiais e detalhes importantes para ajudar você a escolher a ferramenta ideal.&lt;/p&gt;
  36.  
  37. &lt;h3&gt;📋 Comparativo dos Navegadores Antidetect&lt;/h3&gt;
  38.  
  39. &lt;table border=&quot;1&quot; cellpadding=&quot;10&quot; cellspacing=&quot;0&quot;&gt;
  40.  &lt;thead&gt;
  41.    &lt;tr&gt;
  42.      &lt;th&gt;#&lt;/th&gt;
  43.      &lt;th&gt;Nome&lt;/th&gt;
  44.      &lt;th&gt;Gratuito?&lt;/th&gt;
  45.      &lt;th&gt;Limite de Perfis Grátis&lt;/th&gt;
  46.      &lt;th&gt;Link Oficial&lt;/th&gt;
  47.    &lt;/tr&gt;
  48.  &lt;/thead&gt;
  49.  &lt;tbody&gt;
  50.    &lt;tr&gt;
  51.      &lt;td&gt;1&lt;/td&gt;
  52.      &lt;td&gt;Incogniton&lt;/td&gt;
  53.      &lt;td&gt;✅ Sim&lt;/td&gt;
  54.      &lt;td&gt;Até 10&lt;/td&gt;
  55.      &lt;td&gt;&lt;a href=&quot;https://incogniton.com&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; title=&quot;Site oficial do Incogniton&quot;&gt;incogniton.com&lt;/a&gt;&lt;/td&gt;
  56.    &lt;/tr&gt;
  57.    &lt;tr&gt;
  58.      &lt;td&gt;2&lt;/td&gt;
  59.      &lt;td&gt;Dolphin Anty&lt;/td&gt;
  60.      &lt;td&gt;✅ Sim&lt;/td&gt;
  61.      &lt;td&gt;Até 10&lt;/td&gt;
  62.      &lt;td&gt;&lt;a href=&quot;https://dolphin-anty.com&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; title=&quot;Site oficial do Dolphin Anty&quot;&gt;dolphin-anty.com&lt;/a&gt;&lt;/td&gt;
  63.    &lt;/tr&gt;
  64.    &lt;tr&gt;
  65.      &lt;td&gt;3&lt;/td&gt;
  66.      &lt;td&gt;GoLogin&lt;/td&gt;
  67.      &lt;td&gt;✅ Sim&lt;/td&gt;
  68.      &lt;td&gt;Até 3&lt;/td&gt;
  69.      &lt;td&gt;&lt;a href=&quot;https://gologin.com&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; title=&quot;Site oficial do GoLogin&quot;&gt;gologin.com&lt;/a&gt;&lt;/td&gt;
  70.    &lt;/tr&gt;
  71.    &lt;tr&gt;
  72.      &lt;td&gt;4&lt;/td&gt;
  73.      &lt;td&gt;AdsPower&lt;/td&gt;
  74.      &lt;td&gt;✅ Sim&lt;/td&gt;
  75.      &lt;td&gt;2 a 5&lt;/td&gt;
  76.      &lt;td&gt;&lt;a href=&quot;https://adspower.com&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; title=&quot;Site oficial do AdsPower&quot;&gt;adspower.com&lt;/a&gt;&lt;/td&gt;
  77.    &lt;/tr&gt;
  78.    &lt;tr&gt;
  79.      &lt;td&gt;5&lt;/td&gt;
  80.      &lt;td&gt;MoreLogin&lt;/td&gt;
  81.      &lt;td&gt;❌ Não (apenas teste)&lt;/td&gt;
  82.      &lt;td&gt;Teste disponível&lt;/td&gt;
  83.      &lt;td&gt;&lt;a href=&quot;https://morelogin.com&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; title=&quot;Site oficial do MoreLogin&quot;&gt;morelogin.com&lt;/a&gt;&lt;/td&gt;
  84.    &lt;/tr&gt;
  85.    &lt;tr&gt;
  86.      &lt;td&gt;6&lt;/td&gt;
  87.      &lt;td&gt;Kameleo&lt;/td&gt;
  88.      &lt;td&gt;❌ Trial&lt;/td&gt;
  89.      &lt;td&gt;2 navegadores (300 min)&lt;/td&gt;
  90.      &lt;td&gt;&lt;a href=&quot;https://kameleo.com&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; title=&quot;Site oficial do Kameleo&quot;&gt;kameleo.com&lt;/a&gt;&lt;/td&gt;
  91.    &lt;/tr&gt;
  92.    &lt;tr&gt;
  93.      &lt;td&gt;7&lt;/td&gt;
  94.      &lt;td&gt;Nstbrowser&lt;/td&gt;
  95.      &lt;td&gt;❌ Trial&lt;/td&gt;
  96.      &lt;td&gt;Limitado&lt;/td&gt;
  97.      &lt;td&gt;&lt;a href=&quot;https://nstbrowser.com&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; title=&quot;Site oficial do Nstbrowser&quot;&gt;nstbrowser.com&lt;/a&gt;&lt;/td&gt;
  98.    &lt;/tr&gt;
  99.    &lt;tr&gt;
  100.      &lt;td&gt;8&lt;/td&gt;
  101.      &lt;td&gt;Octo Browser&lt;/td&gt;
  102.      &lt;td&gt;❌ Trial&lt;/td&gt;
  103.      &lt;td&gt;Limitado&lt;/td&gt;
  104.      &lt;td&gt;&lt;a href=&quot;https://octobrowser.net&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; title=&quot;Site oficial do Octo Browser&quot;&gt;octobrowser.net&lt;/a&gt;&lt;/td&gt;
  105.    &lt;/tr&gt;
  106.    &lt;tr&gt;
  107.      &lt;td&gt;9&lt;/td&gt;
  108.      &lt;td&gt;Multilogin&lt;/td&gt;
  109.      &lt;td&gt;❌ Trial&lt;/td&gt;
  110.      &lt;td&gt;Limitado&lt;/td&gt;
  111.      &lt;td&gt;&lt;a href=&quot;https://multilogin.com&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; title=&quot;Site oficial do Multilogin&quot;&gt;multilogin.com&lt;/a&gt;&lt;/td&gt;
  112.    &lt;/tr&gt;
  113.    &lt;tr&gt;
  114.      &lt;td&gt;10&lt;/td&gt;
  115.      &lt;td&gt;X-Browser (SmartProxy)&lt;/td&gt;
  116.      &lt;td&gt;✅ Sim&lt;/td&gt;
  117.      &lt;td&gt;Ilimitado (com proxy)&lt;/td&gt;
  118.      &lt;td&gt;&lt;a href=&quot;https://x-browser.io&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; title=&quot;Site oficial do X-Browser&quot;&gt;x-browser.io&lt;/a&gt;&lt;/td&gt;
  119.    &lt;/tr&gt;
  120.    &lt;tr&gt;
  121.      &lt;td&gt;11&lt;/td&gt;
  122.      &lt;td&gt;Lalicat&lt;/td&gt;
  123.      &lt;td&gt;❌ Trial&lt;/td&gt;
  124.      &lt;td&gt;Limitado&lt;/td&gt;
  125.      &lt;td&gt;&lt;a href=&quot;https://lalicat.com&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; title=&quot;Site oficial do Lalicat&quot;&gt;lalicat.com&lt;/a&gt;&lt;/td&gt;
  126.    &lt;/tr&gt;
  127.    &lt;tr&gt;
  128.      &lt;td&gt;12&lt;/td&gt;
  129.      &lt;td&gt;VMLogin&lt;/td&gt;
  130.      &lt;td&gt;❌ Trial&lt;/td&gt;
  131.      &lt;td&gt;Limitado&lt;/td&gt;
  132.      &lt;td&gt;&lt;a href=&quot;https://vmlogin.com&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; title=&quot;Site oficial do VMLogin&quot;&gt;vmlogin.com&lt;/a&gt;&lt;/td&gt;
  133.    &lt;/tr&gt;
  134.    &lt;tr&gt;
  135.      &lt;td&gt;13&lt;/td&gt;
  136.      &lt;td&gt;Ghost Browser&lt;/td&gt;
  137.      &lt;td&gt;✅ Trial&lt;/td&gt;
  138.      &lt;td&gt;Limitado&lt;/td&gt;
  139.      &lt;td&gt;&lt;a href=&quot;https://ghostbrowser.com&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; title=&quot;Site oficial do Ghost Browser&quot;&gt;ghostbrowser.com&lt;/a&gt;&lt;/td&gt;
  140.    &lt;/tr&gt;
  141.    &lt;tr&gt;
  142.      &lt;td&gt;14&lt;/td&gt;
  143.      &lt;td&gt;Sphere (Linken Sphere Free)&lt;/td&gt;
  144.      &lt;td&gt;✅ Sim&lt;/td&gt;
  145.      &lt;td&gt;Ilimitado (versão doada)&lt;/td&gt;
  146.      &lt;td&gt;&lt;a href=&quot;https://linkensphere.pro&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; title=&quot;Site oficial do Sphere/Linken Sphere&quot;&gt;linkensphere.pro&lt;/a&gt;&lt;/td&gt;
  147.    &lt;/tr&gt;
  148.    &lt;tr&gt;
  149.      &lt;td&gt;15&lt;/td&gt;
  150.      &lt;td&gt;GenLogin&lt;/td&gt;
  151.      &lt;td&gt;✅ Trial&lt;/td&gt;
  152.      &lt;td&gt;Limitado&lt;/td&gt;
  153.      &lt;td&gt;&lt;a href=&quot;https://genlogin.com&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; title=&quot;Site oficial do GenLogin&quot;&gt;genlogin.com&lt;/a&gt;&lt;/td&gt;
  154.    &lt;/tr&gt;
  155.    &lt;tr&gt;
  156.      &lt;td&gt;16&lt;/td&gt;
  157.      &lt;td&gt;AntBrowser&lt;/td&gt;
  158.      &lt;td&gt;✅ Trial&lt;/td&gt;
  159.      &lt;td&gt;Limitado&lt;/td&gt;
  160.      &lt;td&gt;&lt;a href=&quot;https://antbrowser.com&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; title=&quot;Site oficial do AntBrowser&quot;&gt;antbrowser.com&lt;/a&gt;&lt;/td&gt;
  161.    &lt;/tr&gt;
  162.    &lt;tr&gt;
  163.      &lt;td&gt;17&lt;/td&gt;
  164.      &lt;td&gt;BitBrowser&lt;/td&gt;
  165.      &lt;td&gt;✅ Trial&lt;/td&gt;
  166.      &lt;td&gt;Limitado&lt;/td&gt;
  167.      &lt;td&gt;&lt;a href=&quot;https://bitbrowser.net&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; title=&quot;Site oficial do BitBrowser&quot;&gt;bitbrowser.net&lt;/a&gt;&lt;/td&gt;
  168.    &lt;/tr&gt;
  169.    &lt;tr&gt;
  170.      &lt;td&gt;18&lt;/td&gt;
  171.      &lt;td&gt;Hidemium&lt;/td&gt;
  172.      &lt;td&gt;✅ Trial&lt;/td&gt;
  173.      &lt;td&gt;Limitado&lt;/td&gt;
  174.      &lt;td&gt;&lt;a href=&quot;https://hidemium.com&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; title=&quot;Site oficial do Hidemium&quot;&gt;hidemium.com&lt;/a&gt;&lt;/td&gt;
  175.    &lt;/tr&gt;
  176.    &lt;tr&gt;
  177.      &lt;td&gt;19&lt;/td&gt;
  178.      &lt;td&gt;Marketer Browser&lt;/td&gt;
  179.      &lt;td&gt;✅ Sim&lt;/td&gt;
  180.      &lt;td&gt;1 perfil&lt;/td&gt;
  181.      &lt;td&gt;&lt;a href=&quot;https://marketerbrowser.com&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; title=&quot;Site oficial do Marketer Browser&quot;&gt;marketerbrowser.com&lt;/a&gt;&lt;/td&gt;
  182.    &lt;/tr&gt;
  183.    &lt;tr&gt;
  184.      &lt;td&gt;20&lt;/td&gt;
  185.      &lt;td&gt;Linken Sphere (versão completa)&lt;/td&gt;
  186.      &lt;td&gt;❌ Pago&lt;/td&gt;
  187.      &lt;td&gt;Limitado no trial&lt;/td&gt;
  188.      &lt;td&gt;&lt;a href=&quot;https://linkensphere.pro&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; title=&quot;Site oficial do Linken Sphere&quot;&gt;linkensphere.pro&lt;/a&gt;&lt;/td&gt;
  189. &lt;/tr&gt;
  190.  
  191. &lt;/tbody&gt; &lt;/table&gt; &lt;h3&gt;🔍 O Que São Navegadores Antidetect?&lt;/h3&gt; &lt;p&gt;Navegadores antidetect são ferramentas que permitem a criação de múltiplos perfis de navegação, cada um com identidade digital única. Eles simulam diferentes fingerprints (impressões digitais digitais do navegador), locais geográficos, versões de sistema operacional, e até dispositivos móveis, tornando quase impossível o rastreamento entre as contas.&lt;/p&gt; &lt;p&gt;Esses navegadores são essenciais para profissionais de marketing digital, agências de publicidade, social media managers, afiliados e qualquer pessoa que precise gerenciar diversas contas simultaneamente, evitando bloqueios, banimentos e rastreamento.&lt;/p&gt; &lt;h3&gt;⚠️ Limitações das Versões Gratuitas&lt;/h3&gt; &lt;p&gt;Embora muitos navegadores antidetect ofereçam versões gratuitas ou trial, é importante destacar que essas versões geralmente possuem limitações, como o número máximo de perfis, funcionalidades reduzidas e restrições de automação. Para uso profissional, especialmente em grande escala, as versões pagas são recomendadas.&lt;/p&gt; &lt;h3&gt;🧩 Considerações Finais&lt;/h3&gt; &lt;p&gt;Se sua necessidade é para gerenciamento de múltiplas contas com privacidade e segurança, navegar por essas opções com perfis únicos é essencial. Porém, se você precisa de uma solução para simular dispositivos Android reais na nuvem, como o GeeLark, atualmente não há alternativas gratuitas com o mesmo nível de funcionalidade.&lt;/p&gt; &lt;p&gt;Antes de investir em qualquer uma dessas ferramentas, recomendamos avaliar suas necessidades específicas e testar as versões gratuitas para garantir que o software atenda aos seus objetivos.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Importante:&lt;/strong&gt; Use essas ferramentas com responsabilidade e sempre respeite as políticas das plataformas que você utiliza. Evite práticas que possam violar termos de uso e legislação vigente.&lt;/p&gt; &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;div style=&quot;text-align:center;margin:15px 0;padding:10px;background-color:#f4f4f4;border-radius:8px;&quot;&gt;
  192.   &lt;a href=&quot;https://www.youtube.com/@canalQb&quot; style=&quot;font-size:18px;font-weight:bold;text-decoration:none;color:#1a73e8;padding:8px 16px;border:2px solid #1a73e8;border-radius:5px;transition:all 0.3s ease;&quot;&gt;
  193.      Clique aqui para visitar o CanalQb no YouTube
  194.   &lt;/a&gt;
  195. &lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://canalqb.blogspot.com/feeds/37861548795214681/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://canalqb.blogspot.com/2025/07/20-melhores-navegadores-antidetect.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/37861548795214681'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/37861548795214681'/><link rel='alternate' type='text/html' href='https://canalqb.blogspot.com/2025/07/20-melhores-navegadores-antidetect.html' title='20 Melhores Navegadores Antidetect: Gratuitos e Pagos'/><author><name>CanalQb</name><uri>http://www.blogger.com/profile/12641039126796028340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtt2Q0QwGuJ3OI0G29twmGKYmZvab5d8AV6fJd_HUdevW7fofyH2lDRAv39LAtg0A2x46Im5VwUT-1cfm0b4g7jgY9IKC_BbqqEV9bew_OhkddtGzaFlM4uL0LUeqS8nxK83Yufp3E6SOycslOyDA6O14vPpHRiPkTCSbb5H05NTE/s220/1QB.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s72-c/CanalQb.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5982274115355506187.post-880642334274714370</id><published>2025-07-30T14:36:00.002-03:00</published><updated>2025-07-31T12:52:58.916-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Renda Extra/Passiva"/><title type='text'>Como Investir em Ações Americanas Morando no Brasil</title><content type='html'>&lt;!--Linha de separação superior--&gt;
  196. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  197.  
  198. &lt;!--Link para o canal YouTube--&gt;
  199. &lt;p style=&quot;text-align: center;&quot;&gt;
  200.  &lt;a href=&quot;https://www.youtube.com/channel/UCdOA_1KzXHIp3gmVyyYv2sg&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot; title=&quot;Visite o @CanalQb no YouTube&quot;&gt;
  201.    &lt;span style=&quot;font-size: 1.2em; font-weight: bold;&quot;&gt;@CanalQb no YouTube&lt;/span&gt;
  202.  &lt;/a&gt;
  203. &lt;/p&gt;
  204.  
  205. &lt;!--Linha de separação inferior--&gt;
  206. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  207.  
  208. &lt;!--Imagem do canal--&gt;
  209. &lt;div style=&quot;margin: 20px 0px; text-align: center;&quot;&gt;
  210.  &lt;img alt=&quot;@CanalQb&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s2560/CanalQb.png&quot; style=&quot;border-radius: 10px; height: auto; max-width: 100%;&quot; /&gt;
  211. &lt;/div&gt;
  212.  
  213. &lt;h2 style=&quot;text-align: center;&quot;&gt;Como Usar a Testnet Chainphon e se Preparar para o Lançamento Oficial&lt;/h2&gt;
  214.  
  215. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  216.  
  217. &lt;!--Vídeo incorporado--&gt;
  218. &lt;div style=&quot;margin-bottom: 30px; text-align: center;&quot;&gt;
  219.  &lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; height=&quot;450&quot; loading=&quot;lazy&quot; src=&quot;https://www.youtube.com/embed/g1dFzkx_SJA?autoplay=1&amp;amp;mute=1&amp;amp;origin=https://canalqb.blogspot.com/&amp;amp;controls=1&amp;amp;rel=0&amp;amp;enablejsapi=1&amp;amp;cc_load_policy=1&quot; title=&quot;Vídeo do @CanalQb&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;
  220. &lt;/div&gt;
  221. &lt;p style=&quot;color: red; font-weight: bold;&quot;&gt;
  222. Sempre crie uma frase de segurança única para jogos, testnets ou airdrops e evite usar sua carteira principal.
  223. &lt;/p&gt;
  224. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 80%;&quot; /&gt;
  225. &lt;br /&gt;
  226.  
  227. &lt;h2&gt;Como Investir em Ações Americanas Morando no Brasil&lt;/h2&gt;
  228.  
  229. &lt;p&gt;Se você mora no Brasil e quer investir no mercado financeiro dos Estados Unidos, saiba que é totalmente possível e legal. Mesmo sem sair do país, existem maneiras práticas de aplicar seu dinheiro em ações de empresas como Apple, Tesla, Amazon, entre outras gigantes listadas na &lt;strong&gt;bolsa americana&lt;/strong&gt;.&lt;/p&gt;
  230.  
  231. &lt;p&gt;Neste guia completo, você vai conhecer as principais formas de investir em ações americanas sendo residente no Brasil, incluindo corretoras internacionais, BDRs e ETFs. O conteúdo está otimizado para quem busca segurança, praticidade e conhecimento antes de investir.&lt;/p&gt;
  232.  
  233. &lt;h2&gt;1. Investimento Direto por Corretoras Americanas&lt;/h2&gt;
  234.  
  235. &lt;p&gt;A maneira mais direta de investir em ações nos EUA é por meio de corretoras internacionais que aceitam investidores brasileiros. Elas oferecem acesso ao mercado norte-americano (NYSE, Nasdaq) com abertura de conta 100% online.&lt;/p&gt;
  236.  
  237. &lt;h3&gt;Corretoras que aceitam brasileiros:&lt;/h3&gt;
  238. &lt;ul&gt;
  239.  &lt;li&gt;&lt;a href=&quot;https://www.sproutfi.com&quot; title=&quot;Sproutfi - antiga Passfolio&quot; rel=&quot;nofollow&quot;&gt;Sproutfi&lt;/a&gt; (antiga Passfolio)&lt;/li&gt;
  240.  &lt;li&gt;&lt;a href=&quot;https://hellonomad.com&quot; title=&quot;Nomad - conta em dólar para brasileiros&quot; rel=&quot;nofollow&quot;&gt;Nomad&lt;/a&gt;&lt;/li&gt;
  241.  &lt;li&gt;&lt;a href=&quot;https://hellostake.com&quot; title=&quot;Stake - corretora internacional&quot; rel=&quot;nofollow&quot;&gt;Stake&lt;/a&gt;&lt;/li&gt;
  242.  &lt;li&gt;&lt;a href=&quot;https://www.interactivebrokers.com&quot; title=&quot;Interactive Brokers&quot; rel=&quot;nofollow&quot;&gt;Interactive Brokers&lt;/a&gt;&lt;/li&gt;
  243. &lt;/ul&gt;
  244.  
  245. &lt;h3&gt;Como funciona:&lt;/h3&gt;
  246. &lt;ul&gt;
  247.  &lt;li&gt;Abra uma conta com envio de documentos (RG ou passaporte + comprovante de residência em inglês)&lt;/li&gt;
  248.  &lt;li&gt;Transfira recursos via plataformas como &lt;strong&gt;Wise&lt;/strong&gt;, &lt;strong&gt;Remessa Online&lt;/strong&gt;, &lt;strong&gt;Nomad&lt;/strong&gt; ou &lt;strong&gt;Western Union&lt;/strong&gt;&lt;/li&gt;
  249.  &lt;li&gt;Compre ações, ETFs e REITs diretamente em dólar&lt;/li&gt;
  250. &lt;/ul&gt;
  251.  
  252. &lt;p&gt;&lt;strong&gt;Exemplo:&lt;/strong&gt; você pode comprar um ETF como o &lt;strong&gt;VOO&lt;/strong&gt;, que replica o S&amp;amp;P 500, diretamente pelo aplicativo da Sproutfi ou da Interactive Brokers.&lt;/p&gt;
  253.  
  254. &lt;h3&gt;Tributação:&lt;/h3&gt;
  255. &lt;ul&gt;
  256.  &lt;li&gt;Isenção de IR para vendas de até &lt;strong&gt;US$ 35 mil por mês&lt;/strong&gt;&lt;/li&gt;
  257.  &lt;li&gt;Acima disso, alíquota de IR varia entre 15% e 22,5% sobre o ganho&lt;/li&gt;
  258.  &lt;li&gt;&lt;strong&gt;Dividendos&lt;/strong&gt; sofrem tributação automática de 30% nos EUA&lt;/li&gt;
  259.  &lt;li&gt;Lucros devem ser declarados no &lt;strong&gt;GCAP&lt;/strong&gt; e &lt;strong&gt;Imposto de Renda anual&lt;/strong&gt;&lt;/li&gt;
  260. &lt;/ul&gt;
  261.  
  262. &lt;h2&gt;2. Investir em BDRs na Bolsa Brasileira&lt;/h2&gt;
  263.  
  264. &lt;p&gt;Uma opção prática para quem deseja investir em ações americanas sem sair do Brasil é por meio dos &lt;strong&gt;BDRs (Brazilian Depositary Receipts)&lt;/strong&gt;. Eles representam ações de empresas estrangeiras e são negociados na B3, a bolsa de valores brasileira.&lt;/p&gt;
  265.  
  266. &lt;h3&gt;Exemplos de BDRs populares:&lt;/h3&gt;
  267. &lt;ul&gt;
  268.  &lt;li&gt;&lt;strong&gt;AAPL34&lt;/strong&gt; – Apple&lt;/li&gt;
  269.  &lt;li&gt;&lt;strong&gt;TSLA34&lt;/strong&gt; – Tesla&lt;/li&gt;
  270.  &lt;li&gt;&lt;strong&gt;AMZO34&lt;/strong&gt; – Amazon&lt;/li&gt;
  271.  &lt;li&gt;&lt;strong&gt;NFLX34&lt;/strong&gt; – Netflix&lt;/li&gt;
  272. &lt;/ul&gt;
  273.  
  274. &lt;h3&gt;Vantagens dos BDRs:&lt;/h3&gt;
  275. &lt;ul&gt;
  276.  &lt;li&gt;Negociação em reais pela sua corretora brasileira (XP, Rico, Clear, etc.)&lt;/li&gt;
  277.  &lt;li&gt;Dispensa transferência internacional de dinheiro&lt;/li&gt;
  278.  &lt;li&gt;Declaração de IR mais simples&lt;/li&gt;
  279. &lt;/ul&gt;
  280.  
  281. &lt;h3&gt;Desvantagens:&lt;/h3&gt;
  282. &lt;ul&gt;
  283.  &lt;li&gt;Taxas de administração e spread&lt;/li&gt;
  284.  &lt;li&gt;Nem todas as ações americanas estão disponíveis como BDRs&lt;/li&gt;
  285.  &lt;li&gt;Dividendos pagos são convertidos e tributados no Brasil&lt;/li&gt;
  286. &lt;/ul&gt;
  287.  
  288. &lt;h2&gt;3. Investir em ETFs e Fundos Internacionais no Brasil&lt;/h2&gt;
  289.  
  290. &lt;p&gt;Outra alternativa simples e acessível é investir em ETFs (fundos de índice) e fundos de investimento internacionais listados na bolsa brasileira.&lt;/p&gt;
  291.  
  292. &lt;h3&gt;ETFs disponíveis na B3:&lt;/h3&gt;
  293. &lt;ul&gt;
  294.  &lt;li&gt;&lt;strong&gt;IVVB11&lt;/strong&gt; – Replica o S&amp;amp;P 500 (equivalente ao VOO)&lt;/li&gt;
  295.  &lt;li&gt;&lt;strong&gt;SPXI11&lt;/strong&gt; – S&amp;amp;P 500 com hedge cambial&lt;/li&gt;
  296.  &lt;li&gt;&lt;strong&gt;NASDAQ11&lt;/strong&gt; – Foco nas ações da Nasdaq&lt;/li&gt;
  297. &lt;/ul&gt;
  298.  
  299. &lt;p&gt;Esses fundos podem ser comprados com poucos cliques, diretamente do seu home broker brasileiro, e permitem exposição indireta ao mercado americano.&lt;/p&gt;
  300.  
  301. &lt;h2&gt;Impostos e Declaração&lt;/h2&gt;
  302.  
  303. &lt;p&gt;Independentemente da forma de investimento, é sua responsabilidade manter a documentação correta e fazer a declaração dos ativos no Imposto de Renda. As regras mudam conforme o tipo de ativo, valor investido e forma de recebimento de dividendos ou lucro.&lt;/p&gt;
  304.  
  305. &lt;p&gt;Em qualquer situação de investimento, é fundamental fazer uma autoanálise: &lt;strong&gt;não invista dinheiro em ativos que você não entende completamente&lt;/strong&gt;. Estude, se informe e, se necessário, consulte um planejador financeiro ou contador.&lt;/p&gt;
  306.  
  307. &lt;h2&gt;Cuidados Importantes&lt;/h2&gt;
  308.  
  309. &lt;ul&gt;
  310.  &lt;li&gt;&lt;strong&gt;Impostos:&lt;/strong&gt; Informe-se sobre suas obrigações tributárias no Brasil e nos EUA.&lt;/li&gt;
  311.  &lt;li&gt;&lt;strong&gt;Taxa de câmbio:&lt;/strong&gt; Investimentos em dólar estão sujeitos à variação cambial.&lt;/li&gt;
  312.  &lt;li&gt;&lt;strong&gt;Risco:&lt;/strong&gt; Ações e ETFs podem oscilar. É importante entender o seu perfil de investidor.&lt;/li&gt;
  313.  &lt;li&gt;&lt;strong&gt;Diversificação:&lt;/strong&gt; Não concentre todos os recursos em um único mercado.&lt;/li&gt;
  314. &lt;/ul&gt;
  315.  
  316. &lt;p&gt;Para quem deseja começar com mais segurança, plataformas como a &lt;a href=&quot;https://hellonomad.com&quot; title=&quot;Conta digital internacional Nomad&quot; rel=&quot;nofollow&quot;&gt;Nomad&lt;/a&gt; e a &lt;a href=&quot;https://www.sproutfi.com&quot; title=&quot;Sproutfi&quot; rel=&quot;nofollow&quot;&gt;Sproutfi&lt;/a&gt; oferecem experiências mais amigáveis, inclusive com suporte em português.&lt;/p&gt;
  317.  
  318. &lt;h2&gt;Conclusão&lt;/h2&gt;
  319.  
  320. &lt;p&gt;Investir em ações americanas é uma excelente forma de diversificar seus investimentos e ter exposição a empresas globais. Existem opções para todos os perfis, desde as mais simples (como ETFs e BDRs) até as mais avançadas (contas em corretoras americanas).&lt;/p&gt;
  321.  
  322. &lt;p&gt;Antes de investir, analise sua tolerância ao risco, sua familiaridade com o mercado externo e a necessidade de controle sobre câmbio e impostos. Um investidor bem informado toma decisões mais seguras e eficientes.&lt;/p&gt;
  323. &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;div style=&quot;text-align:center;margin:15px 0;padding:10px;background-color:#f4f4f4;border-radius:8px;&quot;&gt;
  324.   &lt;a href=&quot;https://www.youtube.com/@canalQb&quot; style=&quot;font-size:18px;font-weight:bold;text-decoration:none;color:#1a73e8;padding:8px 16px;border:2px solid #1a73e8;border-radius:5px;transition:all 0.3s ease;&quot;&gt;
  325.      Clique aqui para visitar o CanalQb no YouTube
  326.   &lt;/a&gt;
  327. &lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://canalqb.blogspot.com/feeds/880642334274714370/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://canalqb.blogspot.com/2025/07/como-investir-em-acoes-americanas.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/880642334274714370'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/880642334274714370'/><link rel='alternate' type='text/html' href='https://canalqb.blogspot.com/2025/07/como-investir-em-acoes-americanas.html' title='Como Investir em Ações Americanas Morando no Brasil'/><author><name>CanalQb</name><uri>http://www.blogger.com/profile/12641039126796028340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtt2Q0QwGuJ3OI0G29twmGKYmZvab5d8AV6fJd_HUdevW7fofyH2lDRAv39LAtg0A2x46Im5VwUT-1cfm0b4g7jgY9IKC_BbqqEV9bew_OhkddtGzaFlM4uL0LUeqS8nxK83Yufp3E6SOycslOyDA6O14vPpHRiPkTCSbb5H05NTE/s220/1QB.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s72-c/CanalQb.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5982274115355506187.post-4730064011432106678</id><published>2025-07-21T21:00:00.002-03:00</published><updated>2025-07-31T12:55:34.584-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SEO para Blogger"/><title type='text'>Como usar Lighthouse CI para avaliar performance do seu blog Blogger</title><content type='html'>&lt;!--Linha de separação superior--&gt;
  328. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  329.  
  330. &lt;!--Link para o canal YouTube--&gt;
  331. &lt;p style=&quot;text-align: center;&quot;&gt;
  332.  &lt;a href=&quot;https://www.youtube.com/channel/UCdOA_1KzXHIp3gmVyyYv2sg&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot; title=&quot;Visite o @CanalQb no YouTube&quot;&gt;
  333.    &lt;span style=&quot;font-size: 1.2em; font-weight: bold;&quot;&gt;@CanalQb no YouTube&lt;/span&gt;
  334.  &lt;/a&gt;
  335. &lt;/p&gt;
  336.  
  337. &lt;!--Linha de separação inferior--&gt;
  338. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  339.  
  340. &lt;!--Imagem do canal--&gt;
  341. &lt;div style=&quot;margin: 20px 0px; text-align: center;&quot;&gt;
  342.  &lt;img alt=&quot;@CanalQb&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s2560/CanalQb.png&quot; style=&quot;border-radius: 10px; height: auto; max-width: 100%;&quot; /&gt;
  343. &lt;/div&gt;
  344.  
  345. &lt;h2 style=&quot;text-align: center;&quot;&gt;Como usar Lighthouse CI para avaliar performance do seu blog Blogger&lt;/h2&gt;
  346.  
  347. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  348.  
  349. &lt;!--Vídeo incorporado--&gt;
  350. &lt;div style=&quot;margin-bottom: 30px; text-align: center;&quot;&gt;
  351.  &lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; height=&quot;450&quot; loading=&quot;lazy&quot; src=&quot;https://www.youtube.com/embed/g1dFzkx_SJA?autoplay=1&amp;amp;mute=1&amp;amp;origin=https://canalqb.blogspot.com/&amp;amp;controls=1&amp;amp;rel=0&amp;amp;enablejsapi=1&amp;amp;cc_load_policy=1&quot; title=&quot;Vídeo do @CanalQb&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;
  352. &lt;/div&gt;
  353. &lt;p style=&quot;color: red; font-weight: bold;&quot;&gt;
  354. Sempre crie uma frase de segurança única para jogos, testnets ou airdrops e evite usar sua carteira principal.
  355. &lt;/p&gt;
  356. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 80%;&quot; /&gt;
  357. &lt;br /&gt;
  358. &lt;h2&gt;Introdução: por que monitorar performance no Blogger?&lt;/h2&gt;
  359. &lt;p&gt;O &lt;strong&gt;Lighthouse CI&lt;/strong&gt; é uma ferramenta poderosa do Google para medir a qualidade técnica dos sites em aspectos como &lt;em&gt;performance&lt;/em&gt;, &lt;em&gt;acessibilidade&lt;/em&gt;, &lt;em&gt;SEO&lt;/em&gt; e &lt;em&gt;boas práticas&lt;/em&gt;. Embora o Blogger seja uma plataforma sem acesso direto a servidores ou &lt;code&gt;npm&lt;/code&gt;, é possível usar o Lighthouse CI de forma externa para analisar o blog e garantir a conformidade com as diretrizes do &lt;strong&gt;Google Search Console&lt;/strong&gt;, &lt;strong&gt;Google Ads&lt;/strong&gt; e &lt;strong&gt;AdSense&lt;/strong&gt;. Este post mostra passo a passo como configurar e usar o Lighthouse CI mesmo com um blog hospedado no Blogspot.&lt;/p&gt;
  360.  
  361. &lt;h2&gt;1. Pontos essenciais para análise no Blogger&lt;/h2&gt;
  362. &lt;ul&gt;
  363.  &lt;li&gt;&lt;strong&gt;Performance&lt;/strong&gt;: tempo de carregamento no mobile e desktop.&lt;/li&gt;
  364.  &lt;li&gt;&lt;strong&gt;SEO técnico&lt;/strong&gt;: metatags, estrutura HTML, dados estruturados, &lt;em&gt;sitemaps&lt;/em&gt;.&lt;/li&gt;
  365.  &lt;li&gt;&lt;strong&gt;Semântica e acessibilidade&lt;/strong&gt;: uso correto de &lt;code&gt;alt&lt;/code&gt;, &lt;code&gt;aria&lt;/code&gt; e títulos.&lt;/li&gt;
  366.  &lt;li&gt;&lt;strong&gt;Boas práticas&lt;/strong&gt;: compressão de imagens, uso de HTTPS, ausência de recursos bloqueados.&lt;/li&gt;
  367. &lt;/ul&gt;
  368.  
  369. &lt;h2&gt;2. O que é o Lighthouse CI&lt;/h2&gt;
  370. &lt;p&gt;O Lighthouse CI funciona como um conjunto de ferramentas de linha de comando que permite executar auditorias automáticas em páginas da web, gerar relatórios acessíveis publicamente (&lt;em&gt;temporary-public-storage&lt;/em&gt;) e até integrar com serviços de CI (como GitHub Actions). É ideal para analisar sites estáticos ou com acesso restrito — como o Blogger.&lt;/p&gt;
  371. &lt;p&gt;O pacote oficial está disponível no npm como &lt;a href=&quot;https://github.com/GoogleChrome/lighthouse-ci&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;@lhci/cli&lt;/a&gt;, desenvolvido pela equipe do Lighthouse.&lt;/p&gt;
  372.  
  373. &lt;h2&gt;3. Como configurar localmente&lt;/h2&gt;
  374. &lt;ol&gt;
  375.  &lt;li&gt;&lt;strong&gt;Instalação&lt;/strong&gt;: no terminal, rode
  376.    &lt;code class=&quot;inline-code&quot;&gt;npm install -g @lhci/cli&lt;/code&gt;.&lt;/li&gt;
  377.  &lt;li&gt;&lt;strong&gt;Arquivo de configuração&lt;/strong&gt;: no diretório do seu projeto (ou pasta local), crie o arquivo &lt;code&gt;lighthouserc.js&lt;/code&gt; com:
  378.    &lt;pre&gt;&lt;code&gt;module.exports = {
  379.  ci: {
  380.    collect: {
  381.      url: [
  382.        &#39;https://canalqb.blogspot.com/&#39;,
  383.        &#39;https://canalqb.blogspot.com/p/scripts.html&#39;
  384.      ],
  385.      numberOfRuns: 3
  386.    },
  387.    upload: {
  388.      target: &#39;temporary-public-storage&#39;
  389.    }
  390.  }
  391. };&lt;/code&gt;&lt;/pre&gt;
  392.  &lt;/li&gt;
  393.  &lt;li&gt;&lt;strong&gt;Execução&lt;/strong&gt;: execute no terminal:
  394.    &lt;code class=&quot;inline-code&quot;&gt;lhci autorun&lt;/code&gt;. O resultado será um link para relatório público.&lt;/li&gt;
  395. &lt;/ol&gt;
  396.  
  397. &lt;h2&gt;4. Usando GitHub Actions (opcional)&lt;/h2&gt;
  398. &lt;p&gt;Se você mantiver um repositório GitHub com conteúdos ou documentação do blog, pode automatizar as auditorias:&lt;/p&gt;
  399. &lt;pre&gt;&lt;code&gt;name: Lighthouse CI
  400.  
  401. on:
  402.  push:
  403.    branches: [main]
  404.  
  405. jobs:
  406.  audit:
  407.    runs-on: ubuntu-latest
  408.    steps:
  409.      - uses: actions/checkout@v3
  410.      - uses: actions/setup-node@v3
  411.        with: node-version: 16
  412.      - run: npm install -g @lhci/cli@0.15.x
  413.      - run: lhci autorun&lt;/code&gt;&lt;/pre&gt;
  414. &lt;p&gt;Esse fluxo dispara auditorias automaticamente a cada push e gera relatórios que ajudam a identificar regressões.&lt;/p&gt;
  415.  
  416. &lt;h2&gt;5. Interpretação dos resultados&lt;/h2&gt;
  417. &lt;p&gt;Os relatórios do Lighthouse CI incluem notas (0–100) em quatro categorias principais:&lt;/p&gt;
  418. &lt;ul&gt;
  419.  &lt;li&gt;&lt;strong&gt;Performance&lt;/strong&gt;: análise de métricas como LCP, FID, CLS.&lt;/li&gt;
  420.  &lt;li&gt;&lt;strong&gt;SEO&lt;/strong&gt;: verificação de tags essenciais, links, mobile.&lt;/li&gt;
  421.  &lt;li&gt;&lt;strong&gt;Best Practices&lt;/strong&gt;: segurança e uso de HTTPS, recursos não bloqueados.&lt;/li&gt;
  422.  &lt;li&gt;&lt;strong&gt;Acessibilidade&lt;/strong&gt;: uso de atributos &lt;em&gt;alt&lt;/em&gt;, títulos, contraste.&lt;/li&gt;
  423. &lt;/ul&gt;
  424. &lt;p&gt;Use os relatórios para priorizar correções, como reduzir tamanho de imagens, adicionar metatags, otimizar scripts ou tornar o site mais responsivo.&lt;/p&gt;
  425.  
  426. &lt;h2&gt;6. Benefícios para AdSense e indexação&lt;/h2&gt;
  427. &lt;ul&gt;
  428.  &lt;li&gt;&lt;strong&gt;Performance rápida&lt;/strong&gt; favorece o engajamento e a qualidade do AdSense.&lt;/li&gt;
  429.  &lt;li&gt;&lt;strong&gt;Meta tags bem configuradas&lt;/strong&gt; ajudam no Search Console e Ads.&lt;/li&gt;
  430.  &lt;li&gt;&lt;strong&gt;Layout responsivo&lt;/strong&gt; melhora visibilidade em mobile e evita penalizações do Googlebot.&lt;/li&gt;
  431.  &lt;li&gt;&lt;strong&gt;Auditoria constante&lt;/strong&gt; permite manter e melhorar o desempenho pós-aprovação.&lt;/li&gt;
  432. &lt;/ul&gt;
  433.  
  434. &lt;h2&gt;7. Dicas avançadas&lt;/h2&gt;
  435. &lt;ul&gt;
  436.  &lt;li&gt;&lt;strong&gt;Evite scripts extras&lt;/strong&gt;: o Blogger bloqueia instalação direta; use widgets com parcimônia.&lt;/li&gt;
  437.  &lt;li&gt;&lt;strong&gt;Compressão de imagens&lt;/strong&gt;: use formatos modernos (&lt;em&gt;WebP&lt;/em&gt;) e defina dimensionamento no HTML.&lt;/li&gt;
  438.  &lt;li&gt;&lt;strong&gt;Schemas e dados estruturados&lt;/strong&gt;: adicione JSON‑LD via template ou gadgets.&lt;/li&gt;
  439.  &lt;li&gt;&lt;strong&gt;Valores do relatório&lt;/strong&gt;: compartilhe nas redes para feedback; adicione o link do relatório no rodapé ou em artigo técnico.&lt;/li&gt;
  440. &lt;/ul&gt;
  441.  
  442. &lt;h2&gt;8. Conclusão&lt;/h2&gt;
  443. &lt;p&gt;Mesmo sem acesso ao backend do Blogger ou instalações nativas, você pode utilizar o Lighthouse CI para monitorar a qualidade do seu blog do ponto de vista técnico. Isso traz ganhos diretos em:&lt;/p&gt;
  444. &lt;ul&gt;
  445.  &lt;li&gt;🕒 menor tempo de carregamento;&lt;/li&gt;
  446.  &lt;li&gt;📈 melhor indexação no Google;&lt;/li&gt;
  447.  &lt;li&gt;💰 mais potencial de ganhos com AdSense;&lt;/li&gt;
  448.  &lt;li&gt;🌐 experiência de leitura mais agradável.&lt;/li&gt;
  449. &lt;/ul&gt;
  450.  
  451. &lt;p&gt;Faça testes periódicos, atualize o &lt;code&gt;lighthouserc.js&lt;/code&gt; com novas URLs e acompanhe a evolução do desempenho. Esse é o caminho para um blog mais profissional e preparado para atrair público e anunciantes.&lt;/p&gt;
  452.  
  453. &lt;p&gt;&lt;strong&gt;Atenção:&lt;/strong&gt; análise de desempenho e adaptações devem considerar o contexto do seu público e os limites da plataforma. Use as métricas como guia, não como regra absoluta.&lt;/p&gt;
  454.  
  455. &lt;p&gt;Para ajuda na configuração, na análise de um relatório Lighthouse CI ou na criação de scripts para gerar sitemaps e dados estruturados, conte comigo. 😊&lt;/p&gt;
  456. &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;div style=&quot;text-align:center;margin:15px 0;padding:10px;background-color:#f4f4f4;border-radius:8px;&quot;&gt;
  457.   &lt;a href=&quot;https://www.youtube.com/@canalQb&quot; style=&quot;font-size:18px;font-weight:bold;text-decoration:none;color:#1a73e8;padding:8px 16px;border:2px solid #1a73e8;border-radius:5px;transition:all 0.3s ease;&quot;&gt;
  458.      Clique aqui para visitar o CanalQb no YouTube
  459.   &lt;/a&gt;
  460. &lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://canalqb.blogspot.com/feeds/4730064011432106678/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://canalqb.blogspot.com/2025/07/como-usar-lighthouseci-para-avaliar.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/4730064011432106678'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/4730064011432106678'/><link rel='alternate' type='text/html' href='https://canalqb.blogspot.com/2025/07/como-usar-lighthouseci-para-avaliar.html' title='Como usar Lighthouse CI para avaliar performance do seu blog Blogger'/><author><name>CanalQb</name><uri>http://www.blogger.com/profile/12641039126796028340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtt2Q0QwGuJ3OI0G29twmGKYmZvab5d8AV6fJd_HUdevW7fofyH2lDRAv39LAtg0A2x46Im5VwUT-1cfm0b4g7jgY9IKC_BbqqEV9bew_OhkddtGzaFlM4uL0LUeqS8nxK83Yufp3E6SOycslOyDA6O14vPpHRiPkTCSbb5H05NTE/s220/1QB.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s72-c/CanalQb.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5982274115355506187.post-336418620059013216</id><published>2025-07-21T20:21:00.001-03:00</published><updated>2025-07-31T12:55:30.980-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="OpenCL"/><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><title type='text'>Comparativo de Desempenho: PyOpenCL vs Loop Tradicional em Python </title><content type='html'>&lt;!--Linha de separação superior--&gt;
  461. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  462.  
  463. &lt;!--Link para o canal YouTube--&gt;
  464. &lt;p style=&quot;text-align: center;&quot;&gt;
  465.  &lt;a href=&quot;https://www.youtube.com/channel/UCdOA_1KzXHIp3gmVyyYv2sg&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot; title=&quot;Visite o @CanalQb no YouTube&quot;&gt;
  466.    &lt;span style=&quot;font-size: 1.2em; font-weight: bold;&quot;&gt;@CanalQb no YouTube&lt;/span&gt;
  467.  &lt;/a&gt;
  468. &lt;/p&gt;
  469.  
  470. &lt;!--Linha de separação inferior--&gt;
  471. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  472.  
  473. &lt;!--Imagem do canal--&gt;
  474. &lt;div style=&quot;margin: 20px 0px; text-align: center;&quot;&gt;
  475.  &lt;img alt=&quot;@CanalQb&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s2560/CanalQb.png&quot; style=&quot;border-radius: 10px; height: auto; max-width: 100%;&quot; /&gt;
  476. &lt;/div&gt;
  477.  
  478. &lt;h2 style=&quot;text-align: center;&quot;&gt;Comparativo entre PyOpenCL e Loop Tradicional em Python: Qual é mais eficiente?&lt;/h2&gt;
  479.  
  480. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  481.  
  482. &lt;!--Vídeo incorporado--&gt;
  483. &lt;div style=&quot;margin-bottom: 30px; text-align: center;&quot;&gt;
  484.  &lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; height=&quot;450&quot; loading=&quot;lazy&quot; src=&quot;https://www.youtube.com/embed/g1dFzkx_SJA?autoplay=1&amp;amp;mute=1&amp;amp;origin=https://canalqb.blogspot.com/&amp;amp;controls=1&amp;amp;rel=0&amp;amp;enablejsapi=1&amp;amp;cc_load_policy=1&quot; title=&quot;Vídeo do @CanalQb&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;
  485. &lt;/div&gt;
  486. &lt;p style=&quot;color: red; font-weight: bold;&quot;&gt;
  487. Sempre crie uma frase de segurança única para jogos, testnets ou airdrops e evite usar sua carteira principal.
  488. &lt;/p&gt;
  489. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 80%;&quot; /&gt;
  490. &lt;h2&gt;&lt;br /&gt;&lt;/h2&gt;
  491.  
  492. &lt;p&gt;A performance computacional é um fator essencial para aplicações que processam grandes volumes de dados. Neste artigo, vamos comparar dois métodos distintos de execução em Python: o uso da GPU com a biblioteca &lt;strong&gt;PyOpenCL&lt;/strong&gt; e o uso de um loop tradicional em Python puro. A ideia é entender como cada abordagem se comporta em termos de velocidade e eficiência no processamento de grandes vetores numéricos.&lt;/p&gt;
  493.  
  494. &lt;h3&gt;1. Introdução à Computação Paralela com PyOpenCL&lt;/h3&gt;
  495.  
  496. &lt;p&gt;&lt;a href=&quot;https://github.com/pyopencl/pyopencl&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; title=&quot;Repositório oficial PyOpenCL&quot;&gt;PyOpenCL&lt;/a&gt; é uma biblioteca que permite a utilização de GPUs e outros dispositivos compatíveis com OpenCL para acelerar aplicações Python. Seu objetivo é tornar possível a paralelização de tarefas com grandes conjuntos de dados, utilizando o poder de processamento das placas gráficas (GPUs).&lt;/p&gt;
  497.  
  498. &lt;p&gt;No exemplo abaixo, criamos dois vetores com &lt;code&gt;10^7&lt;/code&gt; números float32 aleatórios e somamos os dois vetores utilizando um kernel OpenCL executado na GPU:&lt;/p&gt;
  499.  
  500. &lt;pre&gt;import pyopencl as cl
  501. import numpy as np
  502. import time
  503.  
  504. n = 10**7
  505. a = np.random.rand(n).astype(np.float32)
  506. b = np.random.rand(n).astype(np.float32)
  507. result = np.empty_like(a)
  508.  
  509. platform = cl.get_platforms()[0]
  510. device = platform.get_devices()[0]
  511. context = cl.Context([device])
  512. queue = cl.CommandQueue(context)
  513.  
  514. kernel_code = &quot;&quot;&quot;
  515. __kernel void add_vectors(__global const float *a, __global const float *b, __global float *result) {
  516.    int id = get_global_id(0);
  517.    result[id] = a[id] + b[id];
  518. }
  519. &quot;&quot;&quot;
  520. program = cl.Program(context, kernel_code).build()
  521.  
  522. mf = cl.mem_flags
  523. a_buffer = cl.Buffer(context, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=a)
  524. b_buffer = cl.Buffer(context, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=b)
  525. result_buffer = cl.Buffer(context, mf.WRITE_ONLY, result.nbytes)
  526.  
  527. start_time = time.time()
  528. program.add_vectors(queue, (n,), None, a_buffer, b_buffer, result_buffer)
  529. cl.enqueue_copy(queue, result, result_buffer)
  530. end_time = time.time()
  531.  
  532. print(f&quot;Duração do kernel: {end_time - start_time:.2f} segundos&quot;)
  533. &lt;/pre&gt;
  534.  
  535. &lt;h3&gt;2. Método Tradicional com Loop For em Python&lt;/h3&gt;
  536.  
  537. &lt;p&gt;Agora, compare com uma abordagem simples: um loop que apenas imprime números de 1 a 1.000.000. Esse exemplo demonstra o uso do tempo de CPU sem otimização:&lt;/p&gt;
  538.  
  539. &lt;pre&gt;import time
  540.  
  541. start_time = time.time()
  542.  
  543. for i in range(1, 1000000):
  544.    print(i)
  545.  
  546. end_time = time.time()
  547. print(f&quot;Duração: {end_time - start_time:.2f} segundos&quot;)
  548. &lt;/pre&gt;
  549.  
  550. &lt;p&gt;A principal diferença está na paralelização: o loop tradicional usa apenas um núcleo de CPU, enquanto o PyOpenCL utiliza milhares de núcleos de GPU simultaneamente.&lt;/p&gt;
  551.  
  552. &lt;h3&gt;3. Medição de Desempenho com Subprocess&lt;/h3&gt;
  553.  
  554. &lt;p&gt;Além das abordagens acima, também executamos um binário externo chamado &lt;code&gt;puzzle.exe&lt;/code&gt; usando o módulo &lt;code&gt;subprocess&lt;/code&gt;. Isso é útil para medir a duração de processos externos:&lt;/p&gt;
  555.  
  556. &lt;pre&gt;import subprocess
  557. import time
  558.  
  559. def run_executable():
  560.    start_time = time.time()
  561.    process = subprocess.Popen(
  562.        [&quot;puzzle.exe&quot;],
  563.        stdout=subprocess.PIPE,
  564.        stderr=subprocess.PIPE,
  565.        text=True
  566.    )
  567.  
  568.    while True:
  569.        output = process.stdout.readline()
  570.        if output == &#39;&#39; and process.poll() is not None:
  571.            break
  572.        if output:
  573.            print(output.strip())
  574.  
  575.    process.wait()
  576.    end_time = time.time()
  577.  
  578.    stderr_output = process.stderr.read()
  579.    if stderr_output:
  580.        print(&quot;Erros:&quot;)
  581.        print(stderr_output.strip())
  582.  
  583.    print(f&quot;Duração: {end_time - start_time:.2f} segundos&quot;)
  584. &lt;/pre&gt;
  585.  
  586. &lt;h3&gt;4. Conclusões sobre Eficiência&lt;/h3&gt;
  587.  
  588. &lt;p&gt;O teste com &lt;strong&gt;PyOpenCL&lt;/strong&gt; foi visivelmente mais rápido para operações com grandes vetores. Esse ganho de desempenho se justifica pelo uso intensivo da GPU, especializada em operações paralelas. Já o loop tradicional é simples, mas extremamente limitado em desempenho quando comparado ao uso de GPUs.&lt;/p&gt;
  589.  
  590. &lt;h3&gt;5. Quando Usar Cada Abordagem?&lt;/h3&gt;
  591.  
  592. &lt;ul&gt;
  593.  &lt;li&gt;&lt;strong&gt;Use PyOpenCL:&lt;/strong&gt; em aplicações que exigem alto desempenho com vetores grandes, cálculos complexos ou processamento em tempo real.&lt;/li&gt;
  594.  &lt;li&gt;&lt;strong&gt;Use loops tradicionais:&lt;/strong&gt; em scripts simples, testes rápidos ou quando o ambiente não suporta OpenCL.&lt;/li&gt;
  595. &lt;/ul&gt;
  596.  
  597. &lt;h3&gt;6. Observações Finais&lt;/h3&gt;
  598.  
  599. &lt;p&gt;Para programadores que trabalham com processamento intensivo, vale considerar bibliotecas como &lt;a href=&quot;https://numba.pydata.org/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; title=&quot;Numba: acelerador de código Python&quot;&gt;Numba&lt;/a&gt; ou &lt;a href=&quot;https://cupy.dev/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; title=&quot;CuPy - Biblioteca de array acelerado por CUDA&quot;&gt;CuPy&lt;/a&gt; para outras alternativas de aceleração.&lt;/p&gt;
  600.  
  601. &lt;p&gt;Se você está iniciando com computação paralela em Python, comece com exemplos simples como os apresentados acima. É importante entender o modelo de paralelismo antes de aplicar em aplicações mais robustas.&lt;/p&gt;
  602.  
  603. &lt;p&gt;&lt;strong&gt;Aviso:&lt;/strong&gt; Este conteúdo tem fins exclusivamente educacionais. Qualquer decisão de investir tempo, recursos ou dinheiro em ferramentas, serviços ou modelos computacionais deve ser tomada com base em análise individual e compreensão técnica apropriada.&lt;/p&gt;
  604.  
  605. &lt;p&gt;Para mais tutoriais e benchmarks, siga nosso conteúdo no canal &lt;strong&gt;@CanalQb&lt;/strong&gt;.&lt;/p&gt;
  606. &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;div style=&quot;text-align:center;margin:15px 0;padding:10px;background-color:#f4f4f4;border-radius:8px;&quot;&gt;
  607.   &lt;a href=&quot;https://www.youtube.com/@canalQb&quot; style=&quot;font-size:18px;font-weight:bold;text-decoration:none;color:#1a73e8;padding:8px 16px;border:2px solid #1a73e8;border-radius:5px;transition:all 0.3s ease;&quot;&gt;
  608.      Clique aqui para visitar o CanalQb no YouTube
  609.   &lt;/a&gt;
  610. &lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://canalqb.blogspot.com/feeds/336418620059013216/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://canalqb.blogspot.com/2025/07/comparativo-de-desempenho-pyopencl-vs.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/336418620059013216'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/336418620059013216'/><link rel='alternate' type='text/html' href='https://canalqb.blogspot.com/2025/07/comparativo-de-desempenho-pyopencl-vs.html' title='Comparativo de Desempenho: PyOpenCL vs Loop Tradicional em Python '/><author><name>CanalQb</name><uri>http://www.blogger.com/profile/12641039126796028340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtt2Q0QwGuJ3OI0G29twmGKYmZvab5d8AV6fJd_HUdevW7fofyH2lDRAv39LAtg0A2x46Im5VwUT-1cfm0b4g7jgY9IKC_BbqqEV9bew_OhkddtGzaFlM4uL0LUeqS8nxK83Yufp3E6SOycslOyDA6O14vPpHRiPkTCSbb5H05NTE/s220/1QB.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s72-c/CanalQb.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5982274115355506187.post-441947828177439821</id><published>2025-07-07T13:30:00.005-03:00</published><updated>2025-07-07T22:07:18.953-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ESP32"/><category scheme="http://www.blogger.com/atom/ns#" term="Mineradoras e Hypes"/><title type='text'>Como Configurar ESP32-S3 (QFN56) com Firmware NerdMiner Wemos</title><content type='html'>&lt;!--Linha de separação superior--&gt;
  611. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  612.  
  613. &lt;!--Link para o canal YouTube--&gt;
  614. &lt;p style=&quot;text-align: center;&quot;&gt;
  615.  &lt;a href=&quot;https://www.youtube.com/channel/UCdOA_1KzXHIp3gmVyyYv2sg&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot; title=&quot;Visite o @CanalQb no YouTube&quot;&gt;
  616.    &lt;span style=&quot;font-size: 1.2em; font-weight: bold;&quot;&gt;@CanalQb no YouTube&lt;/span&gt;
  617.  &lt;/a&gt;
  618. &lt;/p&gt;
  619.  
  620. &lt;!--Linha de separação inferior--&gt;
  621. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  622.  
  623. &lt;!--Imagem do canal--&gt;
  624. &lt;div style=&quot;margin: 20px 0px; text-align: center;&quot;&gt;
  625.  &lt;img alt=&quot;@CanalQb&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1OsK1wrQe-WgKe8gje-z085s9vkVHFugTBotr3bFzUzc-zoHaNIhuET37jT8LE0AwUMySBhgXUbs0LSRqfxdhdpb7_ImzYDGop2j1httSbIGCnSIm8-r-3y6tscuALIqrrQa_1HqfoAHbtOSCMRFeTgVMT-wONf8us_IyPsE-lkUY7jGs357W1nbENaoU/s1280/ESP32-S3%20102024%20Funcionando%20com%20firmware%20wemos.gif&quot; style=&quot;border-radius: 10px; height: auto; max-width: 100%;&quot; /&gt;
  626. &lt;/div&gt;
  627.  
  628. &lt;h2 style=&quot;text-align: center;&quot;&gt;ESP32-S3 102024 Funcionando com firmware wemos&lt;/h2&gt;
  629.  
  630. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  631.  
  632. &lt;!--Vídeo incorporado--&gt;
  633. &lt;div style=&quot;margin-bottom: 30px; text-align: center;&quot;&gt;
  634.  &lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; height=&quot;450&quot; loading=&quot;lazy&quot; src=&quot;https://www.youtube.com/embed/O1YbOqIKIFE?autoplay=1&amp;amp;mute=1&amp;amp;origin=https://canalqb.blogspot.com/&amp;amp;controls=1&amp;amp;rel=0&amp;amp;enablejsapi=1&amp;amp;cc_load_policy=1&quot; title=&quot;Vídeo do @CanalQb&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;
  635. &lt;/div&gt;
  636.  
  637. &lt;p style=&quot;color: red; font-weight: bold;&quot;&gt;
  638.  Sempre crie uma frase de segurança única para jogos, testnets ou airdrops e evite usar sua carteira principal.
  639. &lt;/p&gt;
  640.  
  641. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 80%;&quot; /&gt;
  642.  
  643. &lt;h3&gt;Introdução&lt;/h3&gt;
  644. &lt;p&gt;
  645. A placa ESP32-S3 102024 é uma excelente opção para projetos IoT, especialmente quando utilizada com o firmware NerdMiner. Entretanto, devido à grande variedade de modelos no mercado com nomenclaturas semelhantes, nem todos os firmwares funcionam corretamente. Neste tutorial, explicaremos como identificar corretamente o seu chip, instalar o firmware compatível e ativar o NerdMiner no seu dispositivo.
  646. &lt;/p&gt;
  647.  
  648. &lt;h3&gt;Pré-requisitos&lt;/h3&gt;
  649. &lt;ul&gt;
  650.  &lt;li&gt;Placa ESP32-S3 (modelo 102024)&lt;/li&gt;
  651.  &lt;li&gt;Python 3.x instalado&lt;/li&gt;
  652.  &lt;li&gt;Módulo &lt;code&gt;esptool&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;Drivers que podem ajudar&amp;nbsp;CH341SER e&amp;nbsp;CP210x_Universal_Windows_Driver&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/li&gt;
  653. &lt;/ul&gt;
  654.  
  655. &lt;h3&gt;Passo 1: Instalar o esptool&lt;/h3&gt;
  656. &lt;p&gt;Abra o terminal e digite:&lt;/p&gt;
  657. &lt;pre&gt;&lt;code&gt;pip install esptool&lt;/code&gt;&lt;/pre&gt;
  658.  
  659. &lt;p&gt;
  660. Certifique-se de adicionar a pasta de scripts do Python ao PATH do Windows. No exemplo abaixo, substitua &lt;strong&gt;XXXX&lt;/strong&gt; pelo seu nome de usuário:
  661. &lt;/p&gt;
  662. &lt;pre&gt;&lt;code&gt;C:\Users\XXXX\AppData\Roaming\Python\Python310\Scripts&lt;/code&gt;&lt;/pre&gt;
  663.  
  664. &lt;h3&gt;Passo 2: Identificar a porta COM&lt;/h3&gt;
  665. &lt;p&gt;
  666. Abra o Gerenciador de Dispositivos e localize em qual porta COM o seu ESP32 está conectado.
  667. &lt;/p&gt;
  668.  
  669. &lt;h3&gt;Passo 3: Verificar as informações do hardware&lt;/h3&gt;
  670. &lt;p&gt;Use o comando abaixo para identificar o chip e características da memória:&lt;/p&gt;
  671. &lt;pre&gt;&lt;code&gt;python -m esptool --port COM3 flash_id&lt;/code&gt;&lt;/pre&gt;
  672.  
  673. &lt;p&gt;Se tudo estiver correto, as linhas esperadas devem ser:&lt;/p&gt;
  674. &lt;ul&gt;
  675.  &lt;li&gt;&lt;strong&gt;Chip is ESP32-S3 (QFN56) (revision v0.2)&lt;/strong&gt;&lt;/li&gt;
  676.  &lt;li&gt;&lt;strong&gt;Features: WiFi, BLE, Embedded Flash 4MB (XMC), Embedded PSRAM 2MB (AP_3v3)&lt;/strong&gt;&lt;/li&gt;
  677. &lt;/ul&gt;
  678.  
  679. &lt;div style=&quot;text-align: center;&quot;&gt;
  680.  &lt;img alt=&quot;@CanalQb&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgrSeow4DccTpBUtJwNtQzVOWKnBANGU3sBs-GmU3wuALpGls278pZtUw3KPwuPtz5rMDXcjIzO-PiQ5ag8nvK25_ziJVDkvjKSGhOSFSAMb8VdUD9V7vmz_rhQO2JnKUQtnFZekTLpsKJr8k2iy25VtUO-5LqUWwneOn0KeaSEY7cppFg2AeuSzlWJYb3B&quot; style=&quot;max-width: 100%;&quot; /&gt;
  681. &lt;/div&gt;
  682.  
  683. &lt;h3&gt;Passo 4: Apagar o firmware original&lt;/h3&gt;
  684. &lt;pre&gt;&lt;code&gt;python -m esptool --chip esp32s3 --port COM3 erase_flash&lt;/code&gt;&lt;/pre&gt;
  685.  
  686. &lt;h3&gt;Passo 5: Baixar o firmware NerdMiner&lt;/h3&gt;
  687. &lt;p&gt;
  688. Você pode baixar os arquivos necessários diretamente do repositório oficial do projeto NerdMiner:
  689. &lt;/p&gt;
  690.  
  691. &lt;p style=&quot;text-align: center;&quot;&gt;
  692.  &lt;a href=&quot;https://github.com/BitMaker-hub/NerdMiner_v2/releases/tag/nerdminer-prerelease-V1.6.4&quot; target=&quot;_blank&quot; title=&quot;NerdMiner Firmware no GitHub&quot;&gt;https://github.com/BitMaker-hub/NerdMiner_v2/releases/tag/nerdminer-prerelease-V1.6.4&lt;/a&gt;
  693. &lt;/p&gt;
  694.  
  695. &lt;h3&gt;Passo 6: Instalar o firmware&lt;/h3&gt;
  696. &lt;p&gt;Execute o comando abaixo dentro da pasta onde estão os arquivos do firmware:&lt;/p&gt;
  697. &lt;pre&gt;&lt;code&gt;
  698. python -m esptool --chip esp32s3 --port COM3 --baud 115200 write_flash -z 0x0 ESP32-S3-mini-wemos_bootloader.bin 0x8000 ESP32-S3-mini-wemos_partitions.bin 0x10000 ESP32-S3-mini-wemos_firmware.bin --after default_reset
  699. &lt;/code&gt;&lt;/pre&gt;
  700. ou
  701. &lt;pre&gt;&lt;code&gt;python -m esptool --chip esp32s3 --port COM3 --baud 115200 --after hard_reset write_flash -z 0x0000 ESP32-S3-mini-wemos_bootloader.bin 0x8000 ESP32-S3-mini-wemos_partitions.bin 0x10000 ESP32-S3-mini-wemos_firmware.bin
  702. &lt;/code&gt;&lt;/pre&gt;
  703. &lt;p&gt;
  704. Após finalizar a gravação, desconecte e reconecte o cabo USB para reiniciar o ESP32.
  705. &lt;/p&gt;
  706.  
  707. &lt;div style=&quot;text-align: center;&quot;&gt;
  708.  &lt;img alt=&quot;@CanalQb&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgNiOR0nsRLCltxOcUB3N1fLpwOJ61tB8gIBJ47vLeC7ZQAr8GFRIo-HGzeKyjcjSGC7in_9AeFoMBegBo0UBl14zqC2DtFrRdcm-PR42UVWFzDWBGrDx7zYqdpR2rfbtiX7IrCPK8k2TQnJIv-6rCa94XzVUUt47c1l2r2JAx9_hhJSxEo2M-7Si-47Y2H&quot; style=&quot;max-width: 100%;&quot; /&gt;
  709. &lt;/div&gt;
  710.  
  711. &lt;h3&gt;Problemas comuns&lt;/h3&gt;
  712. &lt;p&gt;
  713. Se o seu computador ficar emitindo sons de conexão/desconexão repetidamente após reconectar o ESP32, o firmware pode estar incorreto ou mal instalado. Refaça o processo e certifique-se de estar utilizando o firmware compatível.
  714. &lt;/p&gt;
  715.  
  716. &lt;h3&gt;Verificar se funcionou&lt;/h3&gt;
  717. &lt;p&gt;
  718. Se você enxergar uma rede Wi-Fi chamada &lt;strong&gt;NerdMinerAP&lt;/strong&gt;, tudo deu certo. Utilize as credenciais abaixo para acessar:
  719. &lt;/p&gt;
  720.  
  721. &lt;ul&gt;
  722.  &lt;li&gt;AP: NerdMinerAP&lt;/li&gt;
  723.  &lt;li&gt;Senha: MineYourCoins&lt;/li&gt;
  724. &lt;/ul&gt;
  725.  
  726. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 80%;&quot; /&gt;
  727.  
  728. &lt;p style=&quot;font-weight: bold; text-align: center;&quot;&gt; Não se esqueça de salvar sua seed (frase de recuperação) em local seguro e usar frases diferentes para testes. &lt;/p&gt; &lt;p style=&quot;font-size: 1.1em; text-align: center;&quot;&gt; 🚀 Boa mineração com seu ESP32-S3 e NerdMiner! &lt;br /&gt; 🔔 Inscreva-se no &lt;a href=&quot;https://www.youtube.com/channel/UCdOA_1KzXHIp3gmVyyYv2sg&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;@CanalQb&lt;/a&gt; para mais tutoriais. &lt;/p&gt; &lt;!--Linha de separação final--&gt; &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;div style=&quot;text-align:center;margin:15px 0;padding:10px;background-color:#f4f4f4;border-radius:8px;&quot;&gt;
  729.   &lt;a href=&quot;https://www.youtube.com/@canalQb&quot; style=&quot;font-size:18px;font-weight:bold;text-decoration:none;color:#1a73e8;padding:8px 16px;border:2px solid #1a73e8;border-radius:5px;transition:all 0.3s ease;&quot;&gt;
  730.      Clique aqui para visitar o CanalQb no YouTube
  731.   &lt;/a&gt;
  732. &lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://canalqb.blogspot.com/feeds/441947828177439821/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://canalqb.blogspot.com/2025/07/como-configurar-esp32-s3-com-firmware.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/441947828177439821'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/441947828177439821'/><link rel='alternate' type='text/html' href='https://canalqb.blogspot.com/2025/07/como-configurar-esp32-s3-com-firmware.html' title='Como Configurar ESP32-S3 (QFN56) com Firmware NerdMiner Wemos'/><author><name>CanalQb</name><uri>http://www.blogger.com/profile/12641039126796028340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtt2Q0QwGuJ3OI0G29twmGKYmZvab5d8AV6fJd_HUdevW7fofyH2lDRAv39LAtg0A2x46Im5VwUT-1cfm0b4g7jgY9IKC_BbqqEV9bew_OhkddtGzaFlM4uL0LUeqS8nxK83Yufp3E6SOycslOyDA6O14vPpHRiPkTCSbb5H05NTE/s220/1QB.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1OsK1wrQe-WgKe8gje-z085s9vkVHFugTBotr3bFzUzc-zoHaNIhuET37jT8LE0AwUMySBhgXUbs0LSRqfxdhdpb7_ImzYDGop2j1httSbIGCnSIm8-r-3y6tscuALIqrrQa_1HqfoAHbtOSCMRFeTgVMT-wONf8us_IyPsE-lkUY7jGs357W1nbENaoU/s72-c/ESP32-S3%20102024%20Funcionando%20com%20firmware%20wemos.gif" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5982274115355506187.post-8149277557643776529</id><published>2025-06-30T16:28:00.001-03:00</published><updated>2025-07-31T12:55:12.335-03:00</updated><title type='text'>Entenda Endereços Bitcoin, Bech32 e Conversão WIF: Guia Completo</title><content type='html'>&lt;!--Linha de separação superior--&gt;
  733. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  734.  
  735. &lt;!--Link para o canal YouTube--&gt;
  736. &lt;p style=&quot;text-align: center;&quot;&gt;
  737.  &lt;a href=&quot;https://www.youtube.com/channel/UCdOA_1KzXHIp3gmVyyYv2sg&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot; title=&quot;Visite o @CanalQb no YouTube&quot;&gt;
  738.    &lt;span style=&quot;font-size: 1.2em; font-weight: bold;&quot;&gt;@CanalQb no YouTube&lt;/span&gt;
  739.  &lt;/a&gt;
  740. &lt;/p&gt;
  741.  
  742. &lt;!--Linha de separação inferior--&gt;
  743. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  744.  
  745. &lt;!--Imagem do canal--&gt;
  746. &lt;div style=&quot;margin: 20px 0px; text-align: center;&quot;&gt;
  747.  &lt;img alt=&quot;@CanalQb&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s2560/CanalQb.png&quot; style=&quot;border-radius: 10px; height: auto; max-width: 100%;&quot; /&gt;
  748. &lt;/div&gt;
  749.  
  750. &lt;h2 style=&quot;text-align: center;&quot;&gt;Entenda Endereços Bitcoin, Bech32 e Conversão WIF: Guia Completo&lt;/h2&gt;
  751.  
  752. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  753.  
  754. &lt;!--Vídeo incorporado--&gt;
  755. &lt;div style=&quot;margin-bottom: 30px; text-align: center;&quot;&gt;
  756.  &lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; height=&quot;450&quot; loading=&quot;lazy&quot; src=&quot;https://www.youtube.com/embed/g1dFzkx_SJA?autoplay=1&amp;amp;mute=1&amp;amp;origin=https://canalqb.blogspot.com/&amp;amp;controls=1&amp;amp;rel=0&amp;amp;enablejsapi=1&amp;amp;cc_load_policy=1&quot; title=&quot;Vídeo do @CanalQb&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;
  757. &lt;/div&gt;
  758. &lt;p style=&quot;color: red; font-weight: bold;&quot;&gt;
  759. Sempre crie uma frase de segurança única para jogos, testnets ou airdrops e evite usar sua carteira principal.
  760. &lt;/p&gt;
  761. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 80%;&quot; /&gt;
  762. &lt;br /&gt;
  763. &lt;h2&gt;Introdução aos Endereços Bitcoin e Formatos WIF&lt;/h2&gt;
  764. &lt;p&gt;Este artigo apresenta um guia detalhado sobre a geração e manipulação de endereços Bitcoin, incluindo formatos clássicos como P2PKH, endereços segwit Bech32 (BIP173) e o formato WIF para chaves privadas. Também abordamos conceitos importantes de codificação Base58Check e o cálculo de checksums essenciais para garantir a segurança das transações.&lt;/p&gt;
  765.  
  766. &lt;h2&gt;Codificação Bech32 e Endereços Segwit (BIP173)&lt;/h2&gt;
  767. &lt;p&gt;O formato Bech32, definido pela &lt;a href=&quot;https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki&quot; title=&quot;BIP173 especificação Bech32&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;BIP173&lt;/a&gt;, é o padrão para endereços Segwit, mais eficientes e com melhor detecção de erros.&lt;/p&gt;
  768.  
  769. &lt;h3&gt;Funções para Codificação Bech32&lt;/h3&gt;
  770. &lt;ul&gt;
  771.  &lt;li&gt;&lt;code&gt;bech32_polymod&lt;/code&gt;: calcula o checksum para o endereço.&lt;/li&gt;
  772.  &lt;li&gt;&lt;code&gt;bech32_hrp_expand&lt;/code&gt;: expande o prefixo humano legível (HRP) para o cálculo.&lt;/li&gt;
  773.  &lt;li&gt;&lt;code&gt;bech32_create_checksum&lt;/code&gt;: cria o checksum usando os dados e HRP.&lt;/li&gt;
  774.  &lt;li&gt;&lt;code&gt;bech32_encode&lt;/code&gt;: une tudo para gerar o endereço final.&lt;/li&gt;
  775.  &lt;li&gt;&lt;code&gt;convertbits&lt;/code&gt;: converte bits para a base apropriada para Bech32.&lt;/li&gt;
  776. &lt;/ul&gt;
  777.  
  778. &lt;h3&gt;Geração de Endereços Segwit&lt;/h3&gt;
  779. &lt;p&gt;O endereço Segwit é gerado a partir do hash160 da chave pública, codificado usando Bech32, conforme a função &lt;code&gt;encode_segwit_address&lt;/code&gt;. O prefixo &lt;code&gt;bc&lt;/code&gt; é usado para a rede Bitcoin principal.&lt;/p&gt;
  780.  
  781. &lt;h2&gt;Funções Auxiliares para Bitcoin&lt;/h2&gt;
  782. &lt;ul&gt;
  783.  &lt;li&gt;&lt;code&gt;hash160&lt;/code&gt;: realiza o hash SHA-256 seguido de RIPEMD-160, base para endereços Bitcoin.&lt;/li&gt;
  784.  &lt;li&gt;&lt;code&gt;pubkey_to_p2wpkh&lt;/code&gt;: converte a chave pública em endereço Bech32 P2WPKH.&lt;/li&gt;
  785.  &lt;li&gt;&lt;code&gt;p2sh_p2wpkh_address&lt;/code&gt;: cria o endereço P2SH-P2WPKH, para compatibilidade.&lt;/li&gt;
  786. &lt;/ul&gt;
  787.  
  788. &lt;h2&gt;Intervalos de Chaves Privadas e Conversão&lt;/h2&gt;
  789. &lt;p&gt;A função &lt;code&gt;define_interval_from_privkey&lt;/code&gt; calcula um intervalo decimal da chave privada baseado em um tamanho definido, útil para iterações e buscas.&lt;/p&gt;
  790.  
  791. &lt;h3&gt;Exemplo Prático&lt;/h3&gt;
  792. &lt;p&gt;O código abaixo mostra o cálculo do intervalo para a chave privada hexadecimal e sua representação decimal, além do cálculo da entropia usando logaritmo base 2:&lt;/p&gt;
  793. &lt;pre&gt;&lt;code&gt;privkey_hex = &quot;00000000000000000000000000000000000000000000000000000000000000e0&quot;
  794. low, high, privkey_int = define_interval_from_privkey(privkey_hex)
  795. print(f&quot;Chave privada (hex): {privkey_hex}&quot;)
  796. print(f&quot;Intervalo decimal: {low} a {high}&quot;)&lt;/code&gt;&lt;/pre&gt;
  797.  
  798. &lt;h2&gt;Integração com Banco de Dados SQLite&lt;/h2&gt;
  799. &lt;p&gt;O script conecta a um banco SQLite para buscar endereços Bitcoin armazenados, verificando quais chaves geradas correspondem aos endereços existentes. Isso permite identificar chaves privadas associadas a endereços de interesse.&lt;/p&gt;
  800.  
  801. &lt;h2&gt;Geração de Endereços e WIF&lt;/h2&gt;
  802. &lt;p&gt;Para cada valor dentro do intervalo da chave privada, são gerados os formatos:&lt;/p&gt;
  803. &lt;ul&gt;
  804.  &lt;li&gt;P2PKH não comprimido&lt;/li&gt;
  805.  &lt;li&gt;P2PKH comprimido&lt;/li&gt;
  806.  &lt;li&gt;P2SH-P2WPKH&lt;/li&gt;
  807.  &lt;li&gt;Bech32 (P2WPKH)&lt;/li&gt;
  808. &lt;/ul&gt;
  809. &lt;p&gt;Também são gerados os formatos WIF correspondentes para uso em carteiras.&lt;/p&gt;
  810.  
  811. &lt;h2&gt;Codificação Base58 e Base58Check&lt;/h2&gt;
  812. &lt;p&gt;A codificação Base58 é amplamente usada para endereços Bitcoin e WIF, reduzindo ambiguidades em caracteres visuais. Já a Base58Check inclui um checksum para evitar erros de digitação.&lt;/p&gt;
  813.  
  814. &lt;h3&gt;Funções importantes:&lt;/h3&gt;
  815. &lt;ul&gt;
  816.  &lt;li&gt;&lt;code&gt;base58_decode&lt;/code&gt; e &lt;code&gt;base58_encode&lt;/code&gt;: convertem entre bytes e Base58.&lt;/li&gt;
  817.  &lt;li&gt;&lt;code&gt;base58check_decode&lt;/code&gt; e &lt;code&gt;base58check_encode&lt;/code&gt;: adicionam e verificam checksums.&lt;/li&gt;
  818.  &lt;li&gt;&lt;code&gt;wif_to_hex&lt;/code&gt;: converte WIF para chave privada hexadecimal, indicando se é comprimida.&lt;/li&gt;
  819.  &lt;li&gt;&lt;code&gt;hex_to_wif&lt;/code&gt;: converte chave privada hexadecimal para formato WIF, comprimido ou não.&lt;/li&gt;
  820. &lt;/ul&gt;
  821.  
  822. &lt;h2&gt;Exemplo de Conversão WIF&lt;/h2&gt;
  823. &lt;p&gt;Veja um exemplo prático de decodificação e codificação WIF para uma chave privada:&lt;/p&gt;
  824. &lt;pre&gt;&lt;code&gt;wif_uncompressed = &#39;5KJo41DNfD3qPVMv9Dv1AcufqrbaxiaMKP7dNYzmu673YTUuWMa&#39;
  825. priv_hex, is_compressed = wif_to_hex(wif_uncompressed)
  826. print(&quot;Chave privada hex:&quot;, priv_hex)
  827. print(&quot;É comprimida?&quot;, is_compressed)
  828.  
  829. wif_compressed = hex_to_wif(priv_hex, compressed=True)
  830. print(&quot;WIF comprimida:&quot;, wif_compressed)&lt;/code&gt;&lt;/pre&gt;
  831.  
  832. &lt;h2&gt;Considerações Finais&lt;/h2&gt;
  833. &lt;p&gt;Este guia técnico oferece uma base sólida para desenvolvedores e entusiastas entenderem a geração de endereços Bitcoin, manipulação de chaves privadas e formatos WIF, além do uso correto da codificação Base58Check e do formato Bech32. A integração com bancos de dados facilita a verificação e pesquisa de endereços existentes.&lt;/p&gt;
  834.  
  835. &lt;p&gt;&lt;strong&gt;Importante:&lt;/strong&gt; O uso de chaves privadas requer total responsabilidade e conhecimento. Nunca compartilhe suas chaves privadas e evite investimentos sem a devida análise e entendimento dos riscos envolvidos.&lt;/p&gt;
  836.  
  837. &lt;p&gt;Para mais informações sobre Bitcoin, consulte o site oficial:  
  838. &lt;a href=&quot;https://bitcoin.org&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;bitcoin.org&lt;/a&gt;&lt;/p&gt;
  839. &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;div style=&quot;text-align:center;margin:15px 0;padding:10px;background-color:#f4f4f4;border-radius:8px;&quot;&gt;
  840.   &lt;a href=&quot;https://www.youtube.com/@canalQb&quot; style=&quot;font-size:18px;font-weight:bold;text-decoration:none;color:#1a73e8;padding:8px 16px;border:2px solid #1a73e8;border-radius:5px;transition:all 0.3s ease;&quot;&gt;
  841.      Clique aqui para visitar o CanalQb no YouTube
  842.   &lt;/a&gt;
  843. &lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://canalqb.blogspot.com/feeds/8149277557643776529/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://canalqb.blogspot.com/2025/06/entenda-enderecos-bitcoin-bech32-e.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/8149277557643776529'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/8149277557643776529'/><link rel='alternate' type='text/html' href='https://canalqb.blogspot.com/2025/06/entenda-enderecos-bitcoin-bech32-e.html' title='Entenda Endereços Bitcoin, Bech32 e Conversão WIF: Guia Completo'/><author><name>CanalQb</name><uri>http://www.blogger.com/profile/12641039126796028340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtt2Q0QwGuJ3OI0G29twmGKYmZvab5d8AV6fJd_HUdevW7fofyH2lDRAv39LAtg0A2x46Im5VwUT-1cfm0b4g7jgY9IKC_BbqqEV9bew_OhkddtGzaFlM4uL0LUeqS8nxK83Yufp3E6SOycslOyDA6O14vPpHRiPkTCSbb5H05NTE/s220/1QB.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s72-c/CanalQb.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5982274115355506187.post-8818447927550654979</id><published>2025-06-30T16:01:00.003-03:00</published><updated>2025-07-31T12:55:09.871-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Blockchain"/><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><title type='text'>Script Python para Análise e Geração de Endereços Bitcoin com Entropia</title><content type='html'>&lt;!--Linha de separação superior--&gt;
  844. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  845.  
  846. &lt;!--Link para o canal YouTube--&gt;
  847. &lt;p style=&quot;text-align: center;&quot;&gt;
  848.  &lt;a href=&quot;https://www.youtube.com/channel/UCdOA_1KzXHIp3gmVyyYv2sg&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot; title=&quot;Visite o @CanalQb no YouTube&quot;&gt;
  849.    &lt;span style=&quot;font-size: 1.2em; font-weight: bold;&quot;&gt;@CanalQb no YouTube&lt;/span&gt;
  850.  &lt;/a&gt;
  851. &lt;/p&gt;
  852.  
  853. &lt;!--Linha de separação inferior--&gt;
  854. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  855.  
  856. &lt;!--Imagem do canal--&gt;
  857. &lt;div style=&quot;margin: 20px 0px; text-align: center;&quot;&gt;
  858.  &lt;img alt=&quot;@CanalQb&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s2560/CanalQb.png&quot; style=&quot;border-radius: 10px; height: auto; max-width: 100%;&quot; /&gt;
  859. &lt;/div&gt;
  860.  
  861. &lt;h2 style=&quot;text-align: center;&quot;&gt;Como Usar a Testnet Chainphon e se Preparar para o Lançamento Oficial&lt;/h2&gt;
  862.  
  863. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  864.  
  865. &lt;!--Vídeo incorporado--&gt;
  866. &lt;div style=&quot;margin-bottom: 30px; text-align: center;&quot;&gt;
  867.  &lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; height=&quot;450&quot; loading=&quot;lazy&quot; src=&quot;https://www.youtube.com/embed/g1dFzkx_SJA?autoplay=1&amp;amp;mute=1&amp;amp;origin=https://canalqb.blogspot.com/&amp;amp;controls=1&amp;amp;rel=0&amp;amp;enablejsapi=1&amp;amp;cc_load_policy=1&quot; title=&quot;Vídeo do @CanalQb&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;
  868. &lt;/div&gt;
  869. &lt;p style=&quot;color: red; font-weight: bold;&quot;&gt;
  870. Sempre crie uma frase de segurança única para jogos, testnets ou airdrops e evite usar sua carteira principal.
  871. &lt;/p&gt;
  872. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 80%;&quot; /&gt;
  873. &lt;br /&gt;
  874. &lt;h2&gt;Script Python para Análise e Geração de Endereços Bitcoin com Entropia&lt;/h2&gt;
  875. &lt;p&gt;Este artigo apresenta um script em Python que gera e valida endereços Bitcoin comprimidos a partir de intervalos numéricos amplos, calcula a entropia dos valores, e armazena os resultados em arquivos CSV, além de registrar endereços encontrados em arquivos TXT para facilitar análises.&lt;/p&gt;
  876.  
  877. &lt;h2&gt;Introdução ao Script&lt;/h2&gt;
  878. &lt;p&gt;O script trabalha com faixas numéricas muito grandes para gerar possíveis chaves privadas Bitcoin. A partir dessas chaves, ele calcula os endereços correspondentes, verifica se pertencem a uma lista pré-definida e registra os dados gerados, incluindo uma métrica de entropia para cada vetor de bytes gerado.&lt;/p&gt;
  879.  
  880. &lt;h2&gt;Definição das Faixas e Endereços Alvo&lt;/h2&gt;
  881. &lt;p&gt;O código usa três faixas numéricas distintas para geração das chaves e uma lista de endereços Bitcoin comprimidos para validação:&lt;/p&gt;
  882. &lt;ul&gt;
  883.  &lt;li&gt;&lt;code&gt;faixas&lt;/code&gt;: Três tuplas com valores iniciais e finais para geração dos números inteiros usados na criação das chaves.&lt;/li&gt;
  884.  &lt;li&gt;&lt;code&gt;enderecos_btc_lista&lt;/code&gt;: Conjunto de endereços Bitcoin para verificar correspondências durante a geração.&lt;/li&gt;
  885. &lt;/ul&gt;
  886.  
  887. &lt;h2&gt;Funções Principais do Script&lt;/h2&gt;
  888.  
  889. &lt;h3&gt;Cálculo de Entropia&lt;/h3&gt;
  890. &lt;p&gt;A função &lt;code&gt;calcular_entropia(bytes_array)&lt;/code&gt; calcula a entropia de Shannon para o vetor de bytes que representa a chave, mostrando o nível de aleatoriedade do dado.&lt;/p&gt;
  891.  
  892. &lt;h3&gt;Geração de Chaves e Endereços&lt;/h3&gt;
  893. &lt;p&gt;As funções &lt;code&gt;gerar_wif_comprimido(valor)&lt;/code&gt; e &lt;code&gt;gerar_endereco_btc_comprimido(valor)&lt;/code&gt; utilizam a biblioteca &lt;code&gt;bit&lt;/code&gt; para converter o valor inteiro em chave privada no formato WIF comprimido e gerar o endereço Bitcoin correspondente.&lt;/p&gt;
  894.  
  895. &lt;h3&gt;Geração do Vetor de Bytes&lt;/h3&gt;
  896. &lt;p&gt;&lt;code&gt;gerar_vetor_bytes(v)&lt;/code&gt; transforma o número inteiro em uma lista de 32 bytes, no formato esperado para processamento criptográfico.&lt;/p&gt;
  897.  
  898. &lt;h3&gt;Processamento dos Valores&lt;/h3&gt;
  899. &lt;p&gt;A função &lt;code&gt;processar_ref_intervalo(ref_intervalo)&lt;/code&gt; divide as faixas em valores uniformemente espaçados, processa cada valor e seus vizinhos (&lt;code&gt;v-1&lt;/code&gt;, &lt;code&gt;v&lt;/code&gt;, &lt;code&gt;v+1&lt;/code&gt;), calcula entropia, gera chaves e endereços, verifica correspondências e grava os dados em arquivos CSV. Também salva arquivos TXT para endereços encontrados.&lt;/p&gt;
  900.  
  901. &lt;h2&gt;Estrutura de Arquivos Gerados&lt;/h2&gt;
  902. &lt;ul&gt;
  903.  &lt;li&gt;&lt;strong&gt;CSV:&lt;/strong&gt; Para cada faixa e intervalo de referência, um arquivo CSV é criado na pasta &lt;code&gt;csv&lt;/code&gt; contendo índices, valores, vetores, entropia, chaves WIF e endereços Bitcoin.&lt;/li&gt;
  904.  &lt;li&gt;&lt;strong&gt;TXT:&lt;/strong&gt; Para cada endereço Bitcoin encontrado na lista alvo, um arquivo TXT é gerado na pasta &lt;code&gt;achados&lt;/code&gt; contendo o endereço e a chave WIF correspondente.&lt;/li&gt;
  905. &lt;/ul&gt;
  906.  
  907. &lt;h2&gt;Considerações Técnicas e Uso&lt;/h2&gt;
  908. &lt;p&gt;O script processa de forma iterativa aumentando o intervalo de referência, dobrando seu tamanho até o limite máximo definido (&lt;code&gt;2**159&lt;/code&gt;). Para não sobrecarregar a memória e CPU, o processamento é dividido em etapas de tamanho definido (&lt;code&gt;step_size = 1000&lt;/code&gt;), e a coleta de lixo (&lt;code&gt;gc.collect()&lt;/code&gt;) é chamada após cada etapa.&lt;/p&gt;
  909.  
  910. &lt;h2&gt;Recomendações de Segurança&lt;/h2&gt;
  911. &lt;p&gt;Este código é indicado para fins educacionais, pesquisas e auditoria. O uso em ambientes de produção e manipulação real de ativos deve ser realizado com extremo cuidado, sempre avaliando os riscos envolvidos e realizando autoanálise detalhada antes de investir ou movimentar criptomoedas.&lt;/p&gt;
  912.  
  913. &lt;h2&gt;Requisitos&lt;/h2&gt;
  914. &lt;ul&gt;
  915.  &lt;li&gt;Python 3.x&lt;/li&gt;
  916.  &lt;li&gt;Bibliotecas: &lt;code&gt;bit&lt;/code&gt;, &lt;code&gt;math&lt;/code&gt;, &lt;code&gt;csv&lt;/code&gt;, &lt;code&gt;os&lt;/code&gt;, &lt;code&gt;gc&lt;/code&gt;&lt;/li&gt;
  917.  &lt;li&gt;&lt;a href=&quot;https://ofek.gitbooks.io/bit/content/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; title=&quot;Biblioteca bit para Bitcoin em Python&quot;&gt;Biblioteca &lt;code&gt;bit&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  918. &lt;/ul&gt;
  919. &lt;pre&gt;&lt;code&gt;
  920. # Lista de pares início e fim como strings (com aspas removidas)
  921. faixas = [
  922. (2, 3),
  923. (4, 7),
  924. (8, 15),
  925. (16, 31),
  926. (32, 63),
  927. (64, 127),
  928. (128, 255),
  929. (256, 511),
  930. (512, 1023),
  931. (1024, 2047),
  932. (2048, 4095),
  933. (4096, 8191),
  934. (8192, 16383),
  935. (16384, 32767),
  936. (32768, 65535),
  937. (65536, 131071),
  938. (131072, 262143),
  939. (262144, 524287),
  940. (524288, 1048575),
  941. (1048576, 2097151),
  942. (2097152, 4194303),
  943. (4194304, 8388607),
  944. (8388608, 16777215),
  945. (16777216, 33554431),
  946. (33554432, 67108863),
  947. (67108864, 134217727),
  948. (134217728, 268435455),
  949. (268435456, 536870911),
  950. (536870912, 1073741823),
  951. (1073741824, 2147483647),
  952. (2147483648, 4294967295),
  953. (4294967296, 8589934591),
  954. (8589934592, 17179869183),
  955. (17179869184, 34359738367),
  956. (34359738368, 68719476735),
  957. (68719476736, 137438953471),
  958. (137438953472, 274877906943),
  959. (274877906944, 549755813887),
  960. (549755813888, 1099511627775),
  961. (1099511627776, 2199023255551),
  962. (2199023255552, 4398046511103),
  963. (4398046511104, 8796093022207),
  964. (8796093022208, 17592186044415),
  965. (17592186044416, 35184372088831),
  966. (35184372088832, 70368744177663),
  967. (70368744177664, 140737488355327),
  968. (140737488355328, 281474976710655),
  969. (281474976710656, 562949953421311),
  970. (562949953421312, 1125899906842623),
  971. (1125899906842624, 2251799813685247),
  972. (2251799813685248, 4503599627370495),
  973. (4503599627370496, 9007199254740991),
  974. (9007199254740992, 18014398509481983),
  975. (18014398509481984, 36028797018963967),
  976. (36028797018963968, 72057594037927935),
  977. (72057594037927936, 144115188075855871),
  978. (144115188075855872, 288230376151711743),
  979. (288230376151711744, 576460752303423487),
  980. (576460752303423488, 1152921504606846975),
  981. (1152921504606846976, 2305843009213693951),
  982. (2305843009213693952, 4611686018427387903),
  983. (4611686018427387904, 9223372036854775807),
  984. (9223372036854775808, 18446744073709551615),
  985. (18446744073709551616, 36893488147419103231),
  986. (36893488147419103232, 73786976294838206463),
  987. (73786976294838206464, 147573952589676412927),
  988. (147573952589676412928, 295147905179352825855),
  989. (295147905179352825856, 590295810358705651711),
  990. (590295810358705651712, 1180591620717411303423),
  991. (1180591620717411303424, 2361183241434822606847),
  992. (2361183241434822606848, 4722366482869645213695),
  993. (4722366482869645213696, 9444732965739290427391),
  994. (9444732965739290427392, 18889465931478580854783),
  995. (18889465931478580854784, 37778931862957161709567),
  996. (37778931862957161709568, 75557863725914323419135),
  997. (75557863725914323419136, 151115727451828646838271),
  998. (151115727451828646838272, 302231454903657293676543),
  999. (302231454903657293676544, 604462909807314587353087),
  1000. (604462909807314587353088, 1208925819614629174706175),
  1001. (1208925819614629174706176, 2417851639229258349412351),
  1002. (2417851639229258349412352, 4835703278458516698824703),
  1003. (4835703278458516698824704, 9671406556917033397649407),
  1004. (9671406556917033397649408, 19342813113834066795298815),
  1005. (19342813113834066795298816, 38685626227668133590597631),
  1006. (38685626227668133590597632, 77371252455336267181195263),
  1007. (77371252455336267181195264, 154742504910672534362390527),
  1008. (154742504910672534362390528, 309485009821345068724781055),
  1009. (309485009821345068724781056, 618970019642690137449562111),
  1010. (618970019642690137449562112, 1237940039285380274899124223),
  1011. (1237940039285380274899124224, 2475880078570760549798248447),
  1012. (2475880078570760549798248448, 4951760157141521099596496895),
  1013. (4951760157141521099596496896, 9903520314283042199192993791),
  1014. (9903520314283042199192993792, 19807040628566084398385987583),
  1015. (19807040628566084398385987584, 39614081257132168796771975167),
  1016. (39614081257132168796771975168, 79228162514264337593543950335),
  1017. (79228162514264337593543950336, 158456325028528675187087900671),
  1018. (158456325028528675187087900672, 316912650057057350374175801343),
  1019. (316912650057057350374175801344, 633825300114114700748351602687),
  1020. (633825300114114700748351602688, 1267650600228229401496703205375),
  1021. (1267650600228229401496703205376, 2535301200456458802993406410751),
  1022. (2535301200456458802993406410752, 5070602400912917605986812821503),
  1023. (5070602400912917605986812821504, 10141204801825835211973625643007),
  1024. (10141204801825835211973625643008, 20282409603651670423947251286015),
  1025. (20282409603651670423947251286016, 40564819207303340847894502572031),
  1026. (40564819207303340847894502572032, 81129638414606681695789005144063),
  1027. (81129638414606681695789005144064, 162259276829213363391578010288127),
  1028. (162259276829213363391578010288128, 324518553658426726783156020576255),
  1029. (324518553658426726783156020576256, 649037107316853453566312041152511),
  1030. (649037107316853453566312041152512, 1298074214633706907132624082305023),
  1031. (1298074214633706907132624082305024, 2596148429267413814265248164610047),
  1032. (2596148429267413814265248164610048, 5192296858534827628530496329220095),
  1033. (5192296858534827628530496329220096, 10384593717069655257060992658440191),
  1034. (10384593717069655257060992658440192, 20769187434139310514121985316880383),
  1035. (20769187434139310514121985316880384, 41538374868278621028243970633760767),
  1036. (41538374868278621028243970633760768, 83076749736557242056487941267521535),
  1037. (83076749736557242056487941267521536, 166153499473114484112975882535043071),
  1038. (166153499473114484112975882535043072, 332306998946228968225951765070086143),
  1039. (332306998946228968225951765070086144, 664613997892457936451903530140172287),
  1040. (664613997892457936451903530140172288, 1329227995784915872903807060280344575),
  1041. (1329227995784915872903807060280344576, 2658455991569831745807614120560689151),
  1042. (2658455991569831745807614120560689152, 5316911983139663491615228241121378303),
  1043. (5316911983139663491615228241121378304, 10633823966279326983230456482242756607),
  1044. (10633823966279326983230456482242756608, 21267647932558653966460912964485513215),
  1045. (21267647932558653966460912964485513216, 42535295865117307932921825928971026431),
  1046. (42535295865117307932921825928971026432, 85070591730234615865843651857942052863),
  1047. (85070591730234615865843651857942052864, 170141183460469231731687303715884105727),
  1048. (170141183460469231731687303715884105728, 340282366920938463463374607431768211455),
  1049. (340282366920938463463374607431768211456, 680564733841876926926749214863536422911),
  1050. (680564733841876926926749214863536422912, 1361129467683753853853498429727072845823),
  1051. (1361129467683753853853498429727072845824, 2722258935367507707706996859454145691647),
  1052. (2722258935367507707706996859454145691648, 5444517870735015415413993718908291383295),
  1053. (5444517870735015415413993718908291383296, 10889035741470030830827987437816582766591),
  1054. (10889035741470030830827987437816582766592, 21778071482940061661655974875633165533183),
  1055. (21778071482940061661655974875633165533184, 43556142965880123323311949751266331066367),
  1056. (43556142965880123323311949751266331066368, 87112285931760246646623899502532662132735),
  1057. (87112285931760246646623899502532662132736, 174224571863520493293247799005065324265471),
  1058. (174224571863520493293247799005065324265472, 348449143727040986586495598010130648530943),
  1059. (348449143727040986586495598010130648530944, 696898287454081973172991196020261297061887),
  1060. (696898287454081973172991196020261297061888, 1393796574908163946345982392040522594123775),
  1061. (1393796574908163946345982392040522594123776, 2787593149816327892691964784081045188247551),
  1062. (2787593149816327892691964784081045188247552, 5575186299632655785383929568162090376495103),
  1063. (5575186299632655785383929568162090376495104, 11150372599265311570767859136324180752990207),
  1064. (11150372599265311570767859136324180752990208, 22300745198530623141535718272648361505980415),
  1065. (22300745198530623141535718272648361505980416, 44601490397061246283071436545296723011960831),
  1066. (44601490397061246283071436545296723011960832, 89202980794122492566142873090593446023921663),
  1067. (89202980794122492566142873090593446023921664, 178405961588244985132285746181186892047843327),
  1068. (178405961588244985132285746181186892047843328, 356811923176489970264571492362373784095686655),
  1069. (356811923176489970264571492362373784095686656, 713623846352979940529142984724747568191373311),
  1070. (713623846352979940529142984724747568191373312, 1427247692705959881058285969449495136382746623),
  1071. (1427247692705959881058285969449495136382746624, 2854495385411919762116571938898990272765493247),
  1072. (2854495385411919762116571938898990272765493248, 5708990770823839524233143877797980545530986495),
  1073. (5708990770823839524233143877797980545530986496, 11417981541647679048466287755595961091061972991),
  1074. (11417981541647679048466287755595961091061972992, 22835963083295358096932575511191922182123945983),
  1075. (22835963083295358096932575511191922182123945984, 45671926166590716193865151022383844364247891967),
  1076. (45671926166590716193865151022383844364247891968, 91343852333181432387730302044767688728495783935),
  1077. (91343852333181432387730302044767688728495783936, 182687704666362864775460604089535377456991567871),
  1078. (182687704666362864775460604089535377456991567872, 365375409332725729550921208179070754913983135743),
  1079. (365375409332725729550921208179070754913983135744, 730750818665451459101842416358141509827966271487),
  1080. (730750818665451459101842416358141509827966271488, 1461501637330902918203684832716283019655932542975),
  1081.  
  1082. ]
  1083. # Lista de endereços Bitcoin fornecidos
  1084. enderecos_btc_lista = set([
  1085.    &quot;1BgGZ9tcN4rm9KBzDn7KprQz87SZ26SAMH&quot;,
  1086.    &quot;1CUNEBjYrCn2y1SdiUMohaKUi4wpP326Lb&quot;,
  1087.    &quot;19ZewH8Kk1PDbSNdJ97FP4EiCjTRaZMZQA&quot;,
  1088.    &quot;1EhqbyUMvvs7BfL8goY6qcPbD6YKfPqb7e&quot;,
  1089.    &quot;1E6NuFjCi27W5zoXg8TRdcSRq84zJeBW3k&quot;,
  1090.    &quot;1PitScNLyp2HCygzadCh7FveTnfmpPbfp8&quot;,
  1091.    &quot;1McVt1vMtCC7yn5b9wgX1833yCcLXzueeC&quot;,
  1092.    &quot;1M92tSqNmQLYw33fuBvjmeadirh1ysMBxK&quot;,
  1093.    &quot;1CQFwcjw1dwhtkVWBttNLDtqL7ivBonGPV&quot;,
  1094.    &quot;1LeBZP5QCwwgXRtmVUvTVrraqPUokyLHqe&quot;,
  1095.    &quot;1PgQVLmst3Z314JrQn5TNiys8Hc38TcXJu&quot;,
  1096.    &quot;1DBaumZxUkM4qMQRt2LVWyFJq5kDtSZQot&quot;,
  1097.    &quot;1Pie8JkxBT6MGPz9Nvi3fsPkr2D8q3GBc1&quot;,
  1098.    &quot;1ErZWg5cFCe4Vw5BzgfzB74VNLaXEiEkhk&quot;,
  1099.    &quot;1QCbW9HWnwQWiQqVo5exhAnmfqKRrCRsvW&quot;,
  1100.    &quot;1BDyrQ6WoF8VN3g9SAS1iKZcPzFfnDVieY&quot;,
  1101.    &quot;1HduPEXZRdG26SUT5Yk83mLkPyjnZuJ7Bm&quot;,
  1102.    &quot;1GnNTmTVLZiqQfLbAdp9DVdicEnB5GoERE&quot;,
  1103.    &quot;1NWmZRpHH4XSPwsW6dsS3nrNWfL1yrJj4w&quot;,
  1104.    &quot;1HsMJxNiV7TLxmoF6uJNkydxPFDog4NQum&quot;,
  1105.    &quot;14oFNXucftsHiUMY8uctg6N487riuyXs4h&quot;,
  1106.    &quot;1L2GM8eE7mJWLdo3HZS6su1832NX2txaac&quot;,
  1107.    &quot;1LHtnpd8nU5VHEMkG2TMYYNUjjLc992bps&quot;,
  1108.    &quot;1FRoHA9xewq7DjrZ1psWJVeTer8gHRqEvR&quot;,
  1109.    &quot;187swFMjz1G54ycVU56B7jZFHFTNVQFDiu&quot;,
  1110.    &quot;1PWABE7oUahG2AFFQhhvViQovnCr4rEv7Q&quot;,
  1111.    &quot;1PWCx5fovoEaoBowAvF5k91m2Xat9bMgwb&quot;,
  1112.    &quot;1Be2UF9NLfyLFbtm3TCbmuocc9N1Kduci1&quot;,
  1113.    &quot;14iXhn8bGajVWegZHJ18vJLHhntcpL4dex&quot;,
  1114.    &quot;1HBtApAFA9B2YZw3G2YKSMCtb3dVnjuNe2&quot;,
  1115.    &quot;122AJhKLEfkFBaGAd84pLp1kfE7xK3GdT8&quot;,
  1116.    &quot;1F3JRMWudBaj48EhwcHDdpeuy2jwACNxjP&quot;,
  1117.    &quot;1MEzite4ReNuWaL5Ds17ePKt2dCxWEofwk&quot;,
  1118.    &quot;1NpnQyZ7x24ud82b7WiRNvPm6N8bqGQnaS&quot;,
  1119.    &quot;15z9c9sVpu6fwNiK7dMAFgMYSK4GqsGZim&quot;,
  1120.    &quot;15K1YKJMiJ4fpesTVUcByoz334rHmknxmT&quot;,
  1121.    &quot;1KYUv7nSvXx4642TKeuC2SNdTk326uUpFy&quot;,
  1122.    &quot;1LzhS3k3e9Ub8i2W1V8xQFdB8n2MYCHPCa&quot;,
  1123.    &quot;17aPYR1m6pVAacXg1PTDDU7XafvK1dxvhi&quot;,
  1124.    &quot;15c9mPGLku1HuW9LRtBf4jcHVpBUt8txKz&quot;,
  1125.    &quot;1Dn8NF8qDyyfHMktmuoQLGyjWmZXgvosXf&quot;,
  1126.    &quot;1HAX2n9Uruu9YDt4cqRgYcvtGvZj1rbUyt&quot;,
  1127.    &quot;1Kn5h2qpgw9mWE5jKpk8PP4qvvJ1QVy8su&quot;,
  1128.    &quot;1AVJKwzs9AskraJLGHAZPiaZcrpDr1U6AB&quot;,
  1129.    &quot;1Me6EfpwZK5kQziBwBfvLiHjaPGxCKLoJi&quot;,
  1130.    &quot;1NpYjtLira16LfGbGwZJ5JbDPh3ai9bjf4&quot;,
  1131.    &quot;16jY7qLJnxb7CHZyqBP8qca9d51gAjyXQN&quot;,
  1132.    &quot;18ZMbwUFLMHoZBbfpCjUJQTCMCbktshgpe&quot;,
  1133.    &quot;13zb1hQbWVsc2S7ZTZnP2G4undNNpdh5so&quot;,
  1134.    &quot;1BY8GQbnueYofwSuFAT3USAhGjPrkxDdW9&quot;,
  1135.    &quot;1MVDYgVaSN6iKKEsbzRUAYFrYJadLYZvvZ&quot;,
  1136.    &quot;19vkiEajfhuZ8bs8Zu2jgmC6oqZbWqhxhG&quot;,
  1137.    &quot;19YZECXj3SxEZMoUeJ1yiPsw8xANe7M7QR&quot;,
  1138.    &quot;1JTK7s9YVYywfm5XUH7RNhHJH1LshCaRFR&quot;,
  1139.    &quot;12VVRNPi4SJqUTsp6FmqDqY5sGosDtysn4&quot;,
  1140.    &quot;1FWGcVDK3JGzCC3WtkYetULPszMaK2Jksv&quot;,
  1141.    &quot;1J36UjUByGroXcCvmj13U6uwaVv9caEeAt&quot;,
  1142.    &quot;1Bxk4CQdqL9p22JEtDfdXMsng1XacifUtE&quot;,
  1143.    &quot;1BCf6rHUW6m3iH2ptsvnjgLruAiPQQepLe&quot;,
  1144.    &quot;1Kh22PvXERd2xpTQk3ur6pPEqFeckCJfAr&quot;,
  1145.    &quot;1L12FHH2FHjvTviyanuiFVfmzCy46RRATU&quot;,
  1146.    &quot;19eVSDuizydXxhohGh8Ki9WY9KsHdSwoQC&quot;,
  1147.    &quot;15ANYzzCp5BFHcCnVFzXqyibpzgPLWaD8b&quot;,
  1148.    &quot;1KCgMv8fo2TPBpddVi9jqmMmcne9uSNJ5F&quot;,
  1149.    &quot;1CMjscKB3QW7SDyQ4c3C3DEUHiHRhiZVib&quot;,
  1150.    &quot;12JzYkkN76xkwvcPT6AWKZtGX6w2LAgsJg&quot;,
  1151.    &quot;1NLbHuJebVwUZ1XqDjsAyfTRUPwDQbemfv&quot;,
  1152.    &quot;17s2b9ksz5y7abUm92cHwG8jEPCzK3dLnT&quot;,
  1153.    &quot;1PXAyUB8ZoH3WD8n5zoAthYjN15yN5CVq5&quot;,
  1154.    &quot;1Fo65aKq8s8iquMt6weF1rku1moWVEd5Ua&quot;,
  1155.    &quot;16RGFo6hjq9ym6Pj7N5H7L1NR1rVPJyw2v&quot;,
  1156.    &quot;1QKBaU6WAeycb3DbKbLBkX7vJiaS8r42Xo&quot;,
  1157.    &quot;1CD91Vm97mLQvXhrnoMChhJx4TP9MaQkJo&quot;,
  1158.    &quot;19GpszRNUej5yYqxXoLnbZWKew3KdVLkXg&quot;,
  1159.    &quot;1MUJSJYtGPVGkBCTqGspnxyHahpt5Te8jy&quot;,
  1160.    &quot;14u4nA5sugaswb6SZgn5av2vuChdMnD9E5&quot;
  1161.  
  1162. ])
  1163. import hashlib
  1164. import math
  1165. import base58
  1166. from bit import Key
  1167. import csv
  1168. import os
  1169. import gc
  1170.  
  1171. # Função para calcular a entropia de Shannon
  1172. def calcular_entropia(bytes_array):
  1173.    total_bytes = len(bytes_array)
  1174.    valor_count = {byte: bytes_array.count(byte) for byte in set(bytes_array)}
  1175.  
  1176.    entropia = 0
  1177.    for count in valor_count.values():
  1178.        probabilidade = count / total_bytes
  1179.        entropia -= probabilidade * math.log2(probabilidade)
  1180.    return entropia
  1181.  
  1182. # Função para gerar WIF comprimido a partir de um valor
  1183. def gerar_wif_comprimido(valor):
  1184.    chave_privada = Key.from_int(valor)
  1185.    return chave_privada.to_wif()
  1186.  
  1187. # Função para gerar o endereço BTC comprimido a partir de uma chave privada
  1188. def gerar_endereco_btc_comprimido(valor):
  1189.    chave_privada = Key.from_int(valor)
  1190.    return chave_privada.address
  1191.  
  1192. # Função para gerar o vetor de 32 bytes no formato [0, 0, 0, 0, ..., v, 0, 0]
  1193. def gerar_vetor_bytes(v):
  1194.    vetor_bytes = [0] * 32
  1195.    for i in range(31, -1, -1):
  1196.        vetor_bytes[i] = v &amp; 0xFF
  1197.        v &gt;&gt;= 8
  1198.    return vetor_bytes
  1199.  
  1200. max_ref_intervalo = 2**159  # Esse é o valor máximo do loop
  1201.  
  1202. # Exemplo de divisão em pedaços menores para não sobrecarregar
  1203. step_size = 1000  # A cada 1000, você incrementa o valor
  1204.  
  1205. # Função para processar os valores (já definida anteriormente)
  1206. def processar_ref_intervalo(ref_intervalo):
  1207.    for faixa in faixas:
  1208.        orig_inicio, orig_fim = faixa
  1209.  
  1210.        # Calculando o intervalo total e tamanho do passo
  1211.        intervalo_total = orig_fim - orig_inicio
  1212.        tamanho_passo = intervalo_total / (ref_intervalo - 1) if ref_intervalo &gt; 1 else intervalo_total
  1213.  
  1214.        # Gerando os valores uniformemente distribuídos
  1215.        valores = [int(orig_inicio + i * tamanho_passo) for i in range(ref_intervalo)]
  1216.  
  1217.        # Garantir que a pasta &#39;csv&#39; exista
  1218.        os.makedirs(&#39;csv&#39;, exist_ok=True)
  1219.        nome_arquivo = os.path.join(&#39;csv&#39;, f&quot;{ref_intervalo}_{orig_inicio}-{orig_fim}.csv&quot;)
  1220.  
  1221.        # Abrindo o arquivo CSV para escrita
  1222.        with open(nome_arquivo, mode=&#39;w&#39;, newline=&#39;&#39;, encoding=&#39;utf-8&#39;) as file:
  1223.            writer = csv.writer(file, delimiter=&#39;;&#39;)
  1224.  
  1225.            # Escrevendo o cabeçalho
  1226.            writer.writerow([&#39;Index&#39;, &#39;Valor&#39;, &#39;Vetor&#39;, &#39;Entropia&#39;, &#39;WIF Comprimido&#39;, &#39;Endereço BTC Comprimido&#39;])
  1227.  
  1228.            # Processando os valores da faixa
  1229.            for i, v in enumerate(valores):
  1230.                # Valores v, v+1, v-1
  1231.                valores_iterados = [v-1, v, v+1]
  1232.  
  1233.                for v_iter in valores_iterados:
  1234.                    # Converte v_iter para vetor de 32 bytes
  1235.                    vetor_bytes = gerar_vetor_bytes(v_iter)
  1236.  
  1237.                    # Calcula a entropia de Shannon
  1238.                    entropia = calcular_entropia(vetor_bytes)
  1239.  
  1240.                    # Gera WIF comprimido
  1241.                    wif = gerar_wif_comprimido(v_iter)
  1242.  
  1243.                    # Gera o endereço BTC comprimido
  1244.                    btc = gerar_endereco_btc_comprimido(v_iter)
  1245.  
  1246.                    # Verifica se o endereço BTC está na lista
  1247.                    if btc in enderecos_btc_lista:
  1248.                        # Garantir que a pasta &#39;achados&#39; exista
  1249.                        os.makedirs(&#39;achados&#39;, exist_ok=True)
  1250.  
  1251.                        # Salva em arquivo TXT dentro da pasta &#39;achados&#39; com nome {btc}-{wif}.txt
  1252.                        nome_arquivo_achou = os.path.join(&#39;achados&#39;, f&quot;{btc}-{wif}.txt&quot;)
  1253.                        with open(nome_arquivo_achou, mode=&#39;w&#39;, encoding=&#39;utf-8&#39;) as f:
  1254.                            f.write(f&quot;Endereço BTC: {btc}\n&quot;)
  1255.                            f.write(f&quot;WIF Comprimido: {wif}\n&quot;)
  1256.  
  1257.                    # Escreve os dados no arquivo CSV
  1258.                    writer.writerow([f&quot;{i+1:03}&quot;, v_iter, vetor_bytes, f&quot;{entropia:.6f}&quot;, wif, btc])
  1259.  
  1260.                # Imprime os resultados no terminal no formato desejado
  1261.                vetor_bytes_str = str(vetor_bytes)  # Convertendo para o formato de lista [0, 0, 0, ...]
  1262.                print(f&quot;{i+1:03}: {v} - Entropia: {entropia:.6f} - WIF Comprimido: {wif} - Endereço BTC Comprimido: {btc}&quot;, end=&quot;\r&quot;)
  1263.  
  1264.  
  1265. # Inicializando o ref_intervalo com 1 e dobrando a cada iteração até atingir 2^159
  1266. ref_intervalo = 1
  1267.  
  1268. while ref_intervalo &lt;= max_ref_intervalo:
  1269.    #print(f&quot;Iniciando processamento com ref_intervalo = {ref_intervalo}&quot;)
  1270.    processar_ref_intervalo(ref_intervalo)
  1271.    gc.collect()
  1272.    # Dobrar o valor de ref_intervalo para a próxima iteração
  1273.    ref_intervalo *= 2
  1274.    
  1275. &lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;div style=&quot;text-align:center;margin:15px 0;padding:10px;background-color:#f4f4f4;border-radius:8px;&quot;&gt;
  1276.   &lt;a href=&quot;https://www.youtube.com/@canalQb&quot; style=&quot;font-size:18px;font-weight:bold;text-decoration:none;color:#1a73e8;padding:8px 16px;border:2px solid #1a73e8;border-radius:5px;transition:all 0.3s ease;&quot;&gt;
  1277.      Clique aqui para visitar o CanalQb no YouTube
  1278.   &lt;/a&gt;
  1279. &lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://canalqb.blogspot.com/feeds/8818447927550654979/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://canalqb.blogspot.com/2025/06/script-python-para-analise-e-geracao-de.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/8818447927550654979'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/8818447927550654979'/><link rel='alternate' type='text/html' href='https://canalqb.blogspot.com/2025/06/script-python-para-analise-e-geracao-de.html' title='Script Python para Análise e Geração de Endereços Bitcoin com Entropia'/><author><name>CanalQb</name><uri>http://www.blogger.com/profile/12641039126796028340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtt2Q0QwGuJ3OI0G29twmGKYmZvab5d8AV6fJd_HUdevW7fofyH2lDRAv39LAtg0A2x46Im5VwUT-1cfm0b4g7jgY9IKC_BbqqEV9bew_OhkddtGzaFlM4uL0LUeqS8nxK83Yufp3E6SOycslOyDA6O14vPpHRiPkTCSbb5H05NTE/s220/1QB.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s72-c/CanalQb.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5982274115355506187.post-8031548698923529649</id><published>2025-06-30T15:55:00.002-03:00</published><updated>2025-07-31T12:55:05.776-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><title type='text'>Script Python para Geração e Validação de Endereços Bitcoin</title><content type='html'>&lt;!--Linha de separação superior--&gt;
  1280. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  1281.  
  1282. &lt;!--Link para o canal YouTube--&gt;
  1283. &lt;p style=&quot;text-align: center;&quot;&gt;
  1284.  &lt;a href=&quot;https://www.youtube.com/channel/UCdOA_1KzXHIp3gmVyyYv2sg&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot; title=&quot;Visite o @CanalQb no YouTube&quot;&gt;
  1285.    &lt;span style=&quot;font-size: 1.2em; font-weight: bold;&quot;&gt;@CanalQb no YouTube&lt;/span&gt;
  1286.  &lt;/a&gt;
  1287. &lt;/p&gt;
  1288.  
  1289. &lt;!--Linha de separação inferior--&gt;
  1290. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  1291.  
  1292. &lt;!--Imagem do canal--&gt;
  1293. &lt;div style=&quot;margin: 20px 0px; text-align: center;&quot;&gt;
  1294.  &lt;img alt=&quot;@CanalQb&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s2560/CanalQb.png&quot; style=&quot;border-radius: 10px; height: auto; max-width: 100%;&quot; /&gt;
  1295. &lt;/div&gt;
  1296.  
  1297. &lt;h2 style=&quot;text-align: center;&quot;&gt;Script Python para Geração e Validação de Endereços Bitcoin&lt;/h2&gt;
  1298.  
  1299. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  1300.  
  1301. &lt;!--Vídeo incorporado--&gt;
  1302. &lt;div style=&quot;margin-bottom: 30px; text-align: center;&quot;&gt;
  1303.  &lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; height=&quot;450&quot; loading=&quot;lazy&quot; src=&quot;https://www.youtube.com/embed/g1dFzkx_SJA?autoplay=1&amp;amp;mute=1&amp;amp;origin=https://canalqb.blogspot.com/&amp;amp;controls=1&amp;amp;rel=0&amp;amp;enablejsapi=1&amp;amp;cc_load_policy=1&quot; title=&quot;Vídeo do @CanalQb&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;
  1304. &lt;/div&gt;
  1305. &lt;p style=&quot;color: red; font-weight: bold;&quot;&gt;
  1306. Sempre crie uma frase de segurança única para jogos, testnets ou airdrops e evite usar sua carteira principal.
  1307. &lt;/p&gt;
  1308. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 80%;&quot; /&gt;
  1309. &lt;br /&gt;
  1310. &lt;h2&gt;Script Python para Geração e Validação de Endereços Bitcoin&lt;/h2&gt;
  1311. &lt;p&gt;Este conteúdo apresenta um script completo em Python para geração, validação e armazenamento de chaves privadas e endereços Bitcoin, utilizando intervalos numéricos, cálculo de entropia e integração com banco de dados SQLite.&lt;/p&gt;
  1312.  
  1313. &lt;h2&gt;Descrição Geral do Script&lt;/h2&gt;
  1314. &lt;p&gt;O script executa a varredura de grandes intervalos numéricos para gerar chaves privadas, converter em formatos WIF e endereços Bitcoin, validando-os em uma lista pré-definida. Quando um endereço correspondente é encontrado, ele é registrado em arquivo e banco de dados para análises futuras.&lt;/p&gt;
  1315.  
  1316. &lt;h2&gt;Componentes Principais&lt;/h2&gt;
  1317. &lt;ul&gt;
  1318.  &lt;li&gt;&lt;strong&gt;Intervalos de busca:&lt;/strong&gt; Dois grandes intervalos de números inteiros são fornecidos para gerar possíveis chaves privadas.&lt;/li&gt;
  1319.  &lt;li&gt;&lt;strong&gt;Lista de endereços Bitcoin:&lt;/strong&gt; Conjunto de endereços alvo para validação.&lt;/li&gt;
  1320.  &lt;li&gt;&lt;strong&gt;Banco de dados SQLite:&lt;/strong&gt; Armazena os resultados, com tabelas para chaves, valores, entropia e correspondências WIF/BTC.&lt;/li&gt;
  1321.  &lt;li&gt;&lt;strong&gt;Cálculo de entropia:&lt;/strong&gt; Mede a aleatoriedade dos bytes da chave gerada, auxiliando na análise de segurança.&lt;/li&gt;
  1322.  &lt;li&gt;&lt;strong&gt;Logging e controle:&lt;/strong&gt; Uso do módulo &lt;code&gt;logging&lt;/code&gt; para monitoramento e registro de erros e informações durante a execução.&lt;/li&gt;
  1323.  &lt;li&gt;&lt;strong&gt;Tratamento de memória:&lt;/strong&gt; Uso de coleta de lixo explícita (&lt;code&gt;gc.collect()&lt;/code&gt;) para otimizar processamento em intervalos grandes.&lt;/li&gt;
  1324. &lt;/ul&gt;
  1325.  
  1326. &lt;h2&gt;Detalhes Técnicos e Funções&lt;/h2&gt;
  1327.  
  1328. &lt;h3&gt;Configuração do Banco de Dados&lt;/h3&gt;
  1329. &lt;p&gt;Função &lt;code&gt;setup_database()&lt;/code&gt; cria uma tabela chamada &lt;code&gt;btc_keys&lt;/code&gt; com campos para armazenar índices, valores, vetores, entropia, chaves WIF únicas e endereços Bitcoin.&lt;/p&gt;
  1330.  
  1331. &lt;h3&gt;Cálculo de Entropia&lt;/h3&gt;
  1332. &lt;p&gt;A função &lt;code&gt;calcular_entropia(bytes_array)&lt;/code&gt; utiliza a fórmula de Shannon para quantificar a aleatoriedade dos bytes gerados a partir do número inteiro que representa a chave privada.&lt;/p&gt;
  1333.  
  1334. &lt;h3&gt;Geração de Vetor de Bytes&lt;/h3&gt;
  1335. &lt;p&gt;Com &lt;code&gt;gerar_vetor_bytes(v)&lt;/code&gt;, o valor inteiro é convertido em uma lista de 32 bytes, garantindo o formato correto para manipulação criptográfica.&lt;/p&gt;
  1336.  
  1337. &lt;h3&gt;Geração da Chave e Endereço&lt;/h3&gt;
  1338. &lt;p&gt;Função &lt;code&gt;gerar_chave_e_endereco(valor)&lt;/code&gt; usa a biblioteca &lt;code&gt;bit&lt;/code&gt; para transformar o valor em chave privada WIF e endereço Bitcoin correspondente, tratando exceções caso haja erros na conversão.&lt;/p&gt;
  1339.  
  1340. &lt;h3&gt;Processamento de Valores&lt;/h3&gt;
  1341. &lt;p&gt;Para cada valor no intervalo, a função &lt;code&gt;processar_valor()&lt;/code&gt; gera os vetores e chaves, calcula entropia, salva no banco e verifica se o endereço gerado está na lista alvo. Se encontrar, cria arquivo de registro.&lt;/p&gt;
  1342.  
  1343. &lt;h3&gt;Processamento de Intervalos&lt;/h3&gt;
  1344. &lt;p&gt;A função &lt;code&gt;processar_ref_intervalo()&lt;/code&gt; itera pelos intervalos definidos, dividindo em passos e processando cada valor com barra de progresso visual usando &lt;code&gt;tqdm&lt;/code&gt;.&lt;/p&gt;
  1345.  
  1346. &lt;h3&gt;Execução Principal&lt;/h3&gt;
  1347. &lt;p&gt;Na função &lt;code&gt;main()&lt;/code&gt;, a aplicação começa com um intervalo de referência e dobra-o sucessivamente, até o limite máximo definido (&lt;code&gt;2**159&lt;/code&gt;), permitindo escalabilidade e controle de memória.&lt;/p&gt;
  1348.  
  1349. &lt;h2&gt;Considerações de Segurança e Uso&lt;/h2&gt;
  1350. &lt;p&gt;Este script deve ser utilizado apenas para fins educacionais, experimentais ou em ambientes controlados. Manipular chaves privadas de Bitcoin requer extrema responsabilidade para evitar perda ou roubo de ativos digitais.&lt;/p&gt;
  1351. &lt;p&gt;&lt;strong&gt;Importante:&lt;/strong&gt; Avalie cuidadosamente qualquer aplicação em investimentos reais, fazendo autoanálise e evitando movimentações financeiras sem pleno entendimento dos riscos.&lt;/p&gt;
  1352.  
  1353. &lt;h2&gt;Requisitos e Referências&lt;/h2&gt;
  1354. &lt;ul&gt;
  1355.  &lt;li&gt;Python 3.x&lt;/li&gt;
  1356.  &lt;li&gt;Bibliotecas: &lt;code&gt;bit&lt;/code&gt;, &lt;code&gt;tqdm&lt;/code&gt;, &lt;code&gt;sqlite3&lt;/code&gt;, &lt;code&gt;logging&lt;/code&gt;, entre outras padrão.&lt;/li&gt;
  1357.  &lt;li&gt;&lt;a href=&quot;https://ofek.gitbooks.io/bit/content/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; title=&quot;Documentação da biblioteca bit&quot;&gt;Documentação da biblioteca bit para Bitcoin em Python&lt;/a&gt;&lt;/li&gt;
  1358. &lt;/ul&gt;
  1359.  
  1360. &lt;h2&gt;Exemplo de Uso&lt;/h2&gt;
  1361. &lt;p&gt;Ao rodar o script, ele processará os intervalos e exibirá informações no console com o índice, valor, entropia, chave WIF e endereço Bitcoin encontrados, salvando dados no banco SQLite e arquivos de achados no diretório &lt;code&gt;achados&lt;/code&gt;.&lt;/p&gt;
  1362.  
  1363. &lt;p&gt;Este método pode ser adaptado para projetos de auditoria de segurança, pesquisas criptográficas ou desenvolvimento de wallets personalizadas.&lt;/p&gt;
  1364. &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;div style=&quot;text-align:center;margin:15px 0;padding:10px;background-color:#f4f4f4;border-radius:8px;&quot;&gt;
  1365.   &lt;a href=&quot;https://www.youtube.com/@canalQb&quot; style=&quot;font-size:18px;font-weight:bold;text-decoration:none;color:#1a73e8;padding:8px 16px;border:2px solid #1a73e8;border-radius:5px;transition:all 0.3s ease;&quot;&gt;
  1366.      Clique aqui para visitar o CanalQb no YouTube
  1367.   &lt;/a&gt;
  1368. &lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://canalqb.blogspot.com/feeds/8031548698923529649/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://canalqb.blogspot.com/2025/06/script-python-para-geracao-e-validacao.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/8031548698923529649'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/8031548698923529649'/><link rel='alternate' type='text/html' href='https://canalqb.blogspot.com/2025/06/script-python-para-geracao-e-validacao.html' title='Script Python para Geração e Validação de Endereços Bitcoin'/><author><name>CanalQb</name><uri>http://www.blogger.com/profile/12641039126796028340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtt2Q0QwGuJ3OI0G29twmGKYmZvab5d8AV6fJd_HUdevW7fofyH2lDRAv39LAtg0A2x46Im5VwUT-1cfm0b4g7jgY9IKC_BbqqEV9bew_OhkddtGzaFlM4uL0LUeqS8nxK83Yufp3E6SOycslOyDA6O14vPpHRiPkTCSbb5H05NTE/s220/1QB.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s72-c/CanalQb.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5982274115355506187.post-936316372587541548</id><published>2025-06-30T15:51:00.004-03:00</published><updated>2025-07-31T12:55:02.872-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Blockchain"/><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><title type='text'>Conversão e Validação de Chaves WIF em Bitcoin</title><content type='html'>&lt;!--Linha de separação superior--&gt;
  1369. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  1370.  
  1371. &lt;!--Link para o canal YouTube--&gt;
  1372. &lt;p style=&quot;text-align: center;&quot;&gt;
  1373.  &lt;a href=&quot;https://www.youtube.com/channel/UCdOA_1KzXHIp3gmVyyYv2sg&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot; title=&quot;Visite o @CanalQb no YouTube&quot;&gt;
  1374.    &lt;span style=&quot;font-size: 1.2em; font-weight: bold;&quot;&gt;@CanalQb no YouTube&lt;/span&gt;
  1375.  &lt;/a&gt;
  1376. &lt;/p&gt;
  1377.  
  1378. &lt;!--Linha de separação inferior--&gt;
  1379. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  1380.  
  1381. &lt;!--Imagem do canal--&gt;
  1382. &lt;div style=&quot;margin: 20px 0px; text-align: center;&quot;&gt;
  1383.  &lt;img alt=&quot;@CanalQb&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s2560/CanalQb.png&quot; style=&quot;border-radius: 10px; height: auto; max-width: 100%;&quot; /&gt;
  1384. &lt;/div&gt;
  1385.  
  1386. &lt;h2 style=&quot;text-align: center;&quot;&gt;Conversão e Validação de Chaves WIF em Bitcoin&lt;/h2&gt;
  1387.  
  1388. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  1389.  
  1390. &lt;!--Vídeo incorporado--&gt;
  1391. &lt;div style=&quot;margin-bottom: 30px; text-align: center;&quot;&gt;
  1392.  &lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; height=&quot;450&quot; loading=&quot;lazy&quot; src=&quot;https://www.youtube.com/embed/g1dFzkx_SJA?autoplay=1&amp;amp;mute=1&amp;amp;origin=https://canalqb.blogspot.com/&amp;amp;controls=1&amp;amp;rel=0&amp;amp;enablejsapi=1&amp;amp;cc_load_policy=1&quot; title=&quot;Vídeo do @CanalQb&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;
  1393. &lt;/div&gt;
  1394. &lt;p style=&quot;color: red; font-weight: bold;&quot;&gt;
  1395. Sempre crie uma frase de segurança única para jogos, testnets ou airdrops e evite usar sua carteira principal.
  1396. &lt;/p&gt;
  1397. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 80%;&quot; /&gt;
  1398. &lt;br /&gt;
  1399. &lt;h2&gt;Conversão e Validação de Chaves Privadas WIF&lt;/h2&gt;
  1400. &lt;p&gt;Este artigo apresenta um utilitário em Python para converter e validar chaves privadas do formato &lt;strong&gt;WIF (Wallet Import Format)&lt;/strong&gt; para hexadecimal e vice-versa, utilizando a codificação &lt;strong&gt;Base58Check&lt;/strong&gt;. Esta ferramenta é útil para desenvolvedores, auditores de segurança e entusiastas de criptomoedas que desejam entender melhor o funcionamento interno das carteiras Bitcoin.&lt;/p&gt;
  1401.  
  1402. &lt;h2&gt;O que é WIF?&lt;/h2&gt;
  1403. &lt;p&gt;WIF, ou Wallet Import Format, é um formato codificado em Base58Check utilizado para importar/exportar chaves privadas com segurança em carteiras Bitcoin. Ele inclui:&lt;/p&gt;
  1404. &lt;ul&gt;
  1405.  &lt;li&gt;Prefixo (&lt;code&gt;0x80&lt;/code&gt;) que indica uma chave privada padrão;&lt;/li&gt;
  1406.  &lt;li&gt;Bytes opcionais indicando se a chave é comprimida;&lt;/li&gt;
  1407.  &lt;li&gt;Checksum para garantir integridade dos dados.&lt;/li&gt;
  1408. &lt;/ul&gt;
  1409.  
  1410. &lt;h2&gt;Utilidade do Script&lt;/h2&gt;
  1411. &lt;p&gt;O script realiza as seguintes funções:&lt;/p&gt;
  1412. &lt;ul&gt;
  1413.  &lt;li&gt;&lt;strong&gt;Decodificação Base58&lt;/strong&gt;: converte strings codificadas para bytes.&lt;/li&gt;
  1414.  &lt;li&gt;&lt;strong&gt;Validação Base58Check&lt;/strong&gt;: garante que o checksum é válido.&lt;/li&gt;
  1415.  &lt;li&gt;&lt;strong&gt;Conversão WIF → Hex&lt;/strong&gt;: extrai a chave privada em hexadecimal, detectando se está comprimida.&lt;/li&gt;
  1416.  &lt;li&gt;&lt;strong&gt;Conversão Hex → WIF&lt;/strong&gt;: gera WIF válido a partir de uma chave hexadecimal.&lt;/li&gt;
  1417. &lt;/ul&gt;
  1418.  
  1419. &lt;h2&gt;Funções do Script em Python&lt;/h2&gt;
  1420.  
  1421. &lt;h3&gt;base58_decode&lt;/h3&gt;
  1422. &lt;p&gt;Converte uma string Base58 para bytes. Valida os caracteres usando o alfabeto definido para Bitcoin:&lt;/p&gt;
  1423. &lt;pre&gt;&lt;code&gt;BASE58_ALPHABET = &#39;123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz&#39;&lt;/code&gt;&lt;/pre&gt;
  1424.  
  1425. &lt;h3&gt;base58check_encode e base58check_decode&lt;/h3&gt;
  1426. &lt;p&gt;Essas funções garantem integridade dos dados por meio de duplo hash SHA-256 e comparação com checksum:&lt;/p&gt;
  1427. &lt;ul&gt;
  1428.  &lt;li&gt;&lt;code&gt;base58check_encode(data)&lt;/code&gt; → retorna string Base58Check.&lt;/li&gt;
  1429.  &lt;li&gt;&lt;code&gt;base58check_decode(s)&lt;/code&gt; → retorna o payload se checksum for válido.&lt;/li&gt;
  1430. &lt;/ul&gt;
  1431.  
  1432. &lt;h3&gt;wif_to_hex&lt;/h3&gt;
  1433. &lt;p&gt;Converte uma chave WIF para hexadecimal, verificando se é comprimida:&lt;/p&gt;
  1434. &lt;pre&gt;&lt;code&gt;hex_key, is_compressed = wif_to_hex(&#39;5KJo41DNfD3qPVMv9Dv1AcufqrbaxiaMKP7dNYzmu673YTUuWMa&#39;)&lt;/code&gt;&lt;/pre&gt;
  1435.  
  1436. &lt;h3&gt;hex_to_wif&lt;/h3&gt;
  1437. &lt;p&gt;Converte uma chave hexadecimal para WIF, com ou sem compressão:&lt;/p&gt;
  1438. &lt;pre&gt;&lt;code&gt;wif = hex_to_wif(hex_key, compressed=True)&lt;/code&gt;&lt;/pre&gt;
  1439.  
  1440. &lt;h2&gt;Exemplo de Execução&lt;/h2&gt;
  1441. &lt;p&gt;Ao executar o script com o WIF fornecido, temos:&lt;/p&gt;
  1442. &lt;pre&gt;&lt;code&gt;Hexadecimal: 67b20b0a06606f85d6c0621175fc0323dd81fc0d15e7109c0f170e7ad93b0c93
  1443. Comprimida? True
  1444. WIF Comprimida: L3eZf2qKUXEuRfaT13XUSdVLzX7DPnbUoWWay7MpYwtqKHL7BDqT&lt;/code&gt;&lt;/pre&gt;
  1445.  
  1446. &lt;h2&gt;Resumo das Ferramentas e Scripts&lt;/h2&gt;
  1447. &lt;table border=&quot;1&quot; cellpadding=&quot;8&quot; cellspacing=&quot;0&quot;&gt;
  1448.  &lt;thead&gt;
  1449.    &lt;tr&gt;
  1450.      &lt;th&gt;Script&lt;/th&gt;
  1451.      &lt;th&gt;Tema&lt;/th&gt;
  1452.      &lt;th&gt;Funções Principais&lt;/th&gt;
  1453.    &lt;/tr&gt;
  1454.  &lt;/thead&gt;
  1455.  &lt;tbody&gt;
  1456.    &lt;tr&gt;
  1457.      &lt;td&gt;1&lt;/td&gt;
  1458.      &lt;td&gt;Geração de Endereços Bitcoin&lt;/td&gt;
  1459.      &lt;td&gt;Cria endereços a partir de intervalos de chaves privadas, comparando com banco de dados&lt;/td&gt;
  1460.    &lt;/tr&gt;
  1461.    &lt;tr&gt;
  1462.      &lt;td&gt;2&lt;/td&gt;
  1463.      &lt;td&gt;Utilitários Base58Check e Conversão WIF/Hex&lt;/td&gt;
  1464.      &lt;td&gt;Converte e valida WIF, transforma em hexadecimal e vice-versa&lt;/td&gt;
  1465.    &lt;/tr&gt;
  1466.  &lt;/tbody&gt;
  1467. &lt;/table&gt;
  1468.  
  1469. &lt;h2&gt;Segurança e Uso Responsável&lt;/h2&gt;
  1470. &lt;p&gt;Este utilitário é fornecido para fins educacionais e técnicos. O uso de chaves privadas requer extremo cuidado. &lt;strong&gt;Nunca compartilhe ou utilize chaves privadas em ambientes não seguros.&lt;/strong&gt;&lt;/p&gt;
  1471. &lt;p&gt;&lt;strong&gt;Aviso:&lt;/strong&gt; Toda decisão de uso, investimento ou movimentação de criptomoedas deve ser feita com base em conhecimento e análise pessoal. Não siga qualquer procedimento sem entender completamente os riscos envolvidos.&lt;/p&gt;
  1472.  
  1473. &lt;h2&gt;Link oficial da biblioteca&lt;/h2&gt;
  1474. &lt;p&gt;Este script não depende de bibliotecas externas, mas está alinhado com os conceitos definidos na &lt;a href=&quot;https://en.bitcoin.it/wiki/Wallet_import_format&quot; title=&quot;WIF Bitcoin Wiki&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;documentação oficial do WIF na Wiki do Bitcoin&lt;/a&gt;.&lt;/p&gt;
  1475. &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;div style=&quot;text-align:center;margin:15px 0;padding:10px;background-color:#f4f4f4;border-radius:8px;&quot;&gt;
  1476.   &lt;a href=&quot;https://www.youtube.com/@canalQb&quot; style=&quot;font-size:18px;font-weight:bold;text-decoration:none;color:#1a73e8;padding:8px 16px;border:2px solid #1a73e8;border-radius:5px;transition:all 0.3s ease;&quot;&gt;
  1477.      Clique aqui para visitar o CanalQb no YouTube
  1478.   &lt;/a&gt;
  1479. &lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://canalqb.blogspot.com/feeds/936316372587541548/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://canalqb.blogspot.com/2025/06/conversao-e-validacao-de-chaves-wif-em.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/936316372587541548'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/936316372587541548'/><link rel='alternate' type='text/html' href='https://canalqb.blogspot.com/2025/06/conversao-e-validacao-de-chaves-wif-em.html' title='Conversão e Validação de Chaves WIF em Bitcoin'/><author><name>CanalQb</name><uri>http://www.blogger.com/profile/12641039126796028340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtt2Q0QwGuJ3OI0G29twmGKYmZvab5d8AV6fJd_HUdevW7fofyH2lDRAv39LAtg0A2x46Im5VwUT-1cfm0b4g7jgY9IKC_BbqqEV9bew_OhkddtGzaFlM4uL0LUeqS8nxK83Yufp3E6SOycslOyDA6O14vPpHRiPkTCSbb5H05NTE/s220/1QB.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s72-c/CanalQb.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5982274115355506187.post-3123977155233045080</id><published>2025-06-30T15:50:00.002-03:00</published><updated>2025-07-31T12:54:53.507-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Blockchain"/><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><title type='text'>Scanner de Endereços Bitcoin a partir de Faixas de Chaves Privadas</title><content type='html'>&lt;!--Linha de separação superior--&gt;
  1480. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  1481.  
  1482. &lt;!--Link para o canal YouTube--&gt;
  1483. &lt;p style=&quot;text-align: center;&quot;&gt;
  1484.  &lt;a href=&quot;https://www.youtube.com/channel/UCdOA_1KzXHIp3gmVyyYv2sg&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot; title=&quot;Visite o @CanalQb no YouTube&quot;&gt;
  1485.    &lt;span style=&quot;font-size: 1.2em; font-weight: bold;&quot;&gt;@CanalQb no YouTube&lt;/span&gt;
  1486.  &lt;/a&gt;
  1487. &lt;/p&gt;
  1488.  
  1489. &lt;!--Linha de separação inferior--&gt;
  1490. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  1491.  
  1492. &lt;!--Imagem do canal--&gt;
  1493. &lt;div style=&quot;margin: 20px 0px; text-align: center;&quot;&gt;
  1494.  &lt;img alt=&quot;@CanalQb&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s2560/CanalQb.png&quot; style=&quot;border-radius: 10px; height: auto; max-width: 100%;&quot; /&gt;
  1495. &lt;/div&gt;
  1496.  
  1497. &lt;h2 style=&quot;text-align: center;&quot;&gt;Scanner de Endereços Bitcoin a partir de Faixas de Chaves Privadas&lt;/h2&gt;
  1498.  
  1499. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  1500.  
  1501. &lt;!--Vídeo incorporado--&gt;
  1502. &lt;div style=&quot;margin-bottom: 30px; text-align: center;&quot;&gt;
  1503.  &lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; height=&quot;450&quot; loading=&quot;lazy&quot; src=&quot;https://www.youtube.com/embed/g1dFzkx_SJA?autoplay=1&amp;amp;mute=1&amp;amp;origin=https://canalqb.blogspot.com/&amp;amp;controls=1&amp;amp;rel=0&amp;amp;enablejsapi=1&amp;amp;cc_load_policy=1&quot; title=&quot;Vídeo do @CanalQb&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;
  1504. &lt;/div&gt;
  1505. &lt;p style=&quot;color: red; font-weight: bold;&quot;&gt;
  1506. Sempre crie uma frase de segurança única para jogos, testnets ou airdrops e evite usar sua carteira principal.
  1507. &lt;/p&gt;
  1508. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 80%;&quot; /&gt;
  1509. &lt;br /&gt;
  1510. &lt;h2&gt;Scanner de Endereços Bitcoin a partir de Chaves Privadas&lt;/h2&gt;
  1511. &lt;p&gt;Este artigo apresenta um script em Python avançado capaz de escanear endereços Bitcoin derivados de uma faixa específica de chaves privadas. A ferramenta implementa formatos modernos como &lt;strong&gt;Bech32&lt;/strong&gt; (BIP173), &lt;strong&gt;P2SH-P2WPKH&lt;/strong&gt; e &lt;strong&gt;P2PKH&lt;/strong&gt; tanto comprimido quanto não comprimido. Também conecta-se a um banco de dados SQLite para verificar se os endereços gerados já foram utilizados.&lt;/p&gt;
  1512.  
  1513. &lt;h2&gt;Funcionamento da Ferramenta&lt;/h2&gt;
  1514. &lt;p&gt;O script inicia com a definição de uma chave privada em hexadecimal e calcula um intervalo de valores a partir dela. Em seguida, cada chave no intervalo é convertida em endereços Bitcoin nos principais formatos. Esses endereços são comparados com um banco de dados local para identificar coincidências conhecidas.&lt;/p&gt;
  1515.  
  1516. &lt;h3&gt;Dependências Utilizadas&lt;/h3&gt;
  1517. &lt;ul&gt;
  1518.  &lt;li&gt;&lt;code&gt;sqlite3&lt;/code&gt; - Interface para banco de dados SQLite.&lt;/li&gt;
  1519.  &lt;li&gt;&lt;code&gt;math&lt;/code&gt; e &lt;code&gt;decimal&lt;/code&gt; - Utilizadas para cálculos de entropia.&lt;/li&gt;
  1520.  &lt;li&gt;&lt;code&gt;hashlib&lt;/code&gt; e &lt;code&gt;base58&lt;/code&gt; - Para funções criptográficas.&lt;/li&gt;
  1521.  &lt;li&gt;&lt;code&gt;bit&lt;/code&gt; - Biblioteca Bitcoin para Python (&lt;a href=&quot;https://ofek.dev/bit/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; title=&quot;bit library Python&quot;&gt;documentação oficial&lt;/a&gt;).&lt;/li&gt;
  1522. &lt;/ul&gt;
  1523.  
  1524. &lt;h2&gt;Codificação Bech32 (BIP173)&lt;/h2&gt;
  1525. &lt;p&gt;A codificação Bech32 permite criar endereços do tipo Segwit com maior tolerância a erros e menor risco de colisões. O script implementa funções conforme o padrão BIP173 para gerar endereços a partir da chave pública.&lt;/p&gt;
  1526.  
  1527. &lt;h3&gt;Funções para Bech32&lt;/h3&gt;
  1528. &lt;ul&gt;
  1529.  &lt;li&gt;&lt;code&gt;bech32_polymod&lt;/code&gt;: cálculo do checksum.&lt;/li&gt;
  1530.  &lt;li&gt;&lt;code&gt;bech32_hrp_expand&lt;/code&gt;: expansão do prefixo HRP (&quot;bc&quot;).&lt;/li&gt;
  1531.  &lt;li&gt;&lt;code&gt;bech32_create_checksum&lt;/code&gt;: geração do checksum.&lt;/li&gt;
  1532.  &lt;li&gt;&lt;code&gt;convertbits&lt;/code&gt;: conversão de bits para formato base 5.&lt;/li&gt;
  1533.  &lt;li&gt;&lt;code&gt;bech32_encode&lt;/code&gt;: construção final do endereço.&lt;/li&gt;
  1534. &lt;/ul&gt;
  1535.  
  1536. &lt;h2&gt;Intervalo de Chaves Privadas&lt;/h2&gt;
  1537. &lt;p&gt;Uma chave privada hexadecimal é transformada em inteiro decimal e usada para definir um intervalo com &lt;code&gt;define_interval&lt;/code&gt;. Esse intervalo é explorado para gerar múltiplas chaves e endereços:&lt;/p&gt;
  1538.  
  1539. &lt;pre&gt;&lt;code&gt;privkey_hex = &quot;00000000000000000000000000000000000000000000000000000000000000e0&quot;
  1540. low, high, pk_int = define_interval(privkey_hex)&lt;/code&gt;&lt;/pre&gt;
  1541.  
  1542. &lt;p&gt;Exemplo de saída:&lt;/p&gt;
  1543. &lt;ul&gt;
  1544.  &lt;li&gt;&lt;strong&gt;Chave privada (hex):&lt;/strong&gt; 000000...e0&lt;/li&gt;
  1545.  &lt;li&gt;&lt;strong&gt;Intervalo:&lt;/strong&gt; 224 - 287 (decimal)&lt;/li&gt;
  1546.  &lt;li&gt;&lt;strong&gt;Entropia (log2):&lt;/strong&gt; log2(224) a log2(287)&lt;/li&gt;
  1547. &lt;/ul&gt;
  1548.  
  1549. &lt;h2&gt;Verificação em Banco de Dados&lt;/h2&gt;
  1550. &lt;p&gt;Após a geração dos endereços, o script conecta-se ao banco SQLite configurado com a tabela &lt;code&gt;enderecos&lt;/code&gt;. Cada endereço gerado é verificado se existe no banco, o que pode ser útil para estudos sobre endereços conhecidos ou reutilizados.&lt;/p&gt;
  1551.  
  1552. &lt;h2&gt;Formatos de Endereços Gerados&lt;/h2&gt;
  1553. &lt;p&gt;Para cada chave privada no intervalo, são gerados os seguintes formatos de endereço:&lt;/p&gt;
  1554. &lt;ul&gt;
  1555.  &lt;li&gt;&lt;strong&gt;P2PKH (não comprimido):&lt;/strong&gt; padrão antigo usado amplamente até hoje.&lt;/li&gt;
  1556.  &lt;li&gt;&lt;strong&gt;P2PKH (comprimido):&lt;/strong&gt; versão mais compacta da chave pública.&lt;/li&gt;
  1557.  &lt;li&gt;&lt;strong&gt;P2SH-P2WPKH:&lt;/strong&gt; compatível com carteiras antigas mas com suporte parcial a Segwit.&lt;/li&gt;
  1558.  &lt;li&gt;&lt;strong&gt;Bech32 (P2WPKH):&lt;/strong&gt; formato nativo Segwit mais moderno.&lt;/li&gt;
  1559. &lt;/ul&gt;
  1560.  
  1561. &lt;h3&gt;Exemplo de resultado&lt;/h3&gt;
  1562. &lt;pre&gt;&lt;code&gt;P2PKH (não comprimido)    1ExampleUncompressedAddress...
  1563. P2PKH (comprimido)        1ExampleCompressedAddress...
  1564. P2SH-P2WPKH               3ExampleP2SHAddress...
  1565. Bech32 (P2WPKH)           bc1examplebech32address...
  1566. WIF não comprimido:       5KExampleUncompressedWIF...
  1567. WIF comprimido:           LExampleCompressedWIF...&lt;/code&gt;&lt;/pre&gt;
  1568.  
  1569. &lt;h2&gt;Exportação de Resultados&lt;/h2&gt;
  1570. &lt;p&gt;Os resultados encontrados são salvos no arquivo &lt;code&gt;enderecos_encontrados.txt&lt;/code&gt; para futura análise, com separação entre cada grupo de dados.&lt;/p&gt;
  1571.  
  1572. &lt;h2&gt;Considerações de Segurança&lt;/h2&gt;
  1573. &lt;p&gt;Este script é destinado a fins educacionais e de auditoria. Não é recomendado utilizá-lo para gerar carteiras reais. &lt;strong&gt;Nunca reutilize ou compartilhe suas chaves privadas.&lt;/strong&gt;&lt;/p&gt;
  1574.  
  1575. &lt;p&gt;&lt;strong&gt;Aviso:&lt;/strong&gt; O uso de ferramentas de análise de chaves privadas deve ser feito com responsabilidade. Não invista ou mova fundos em criptomoedas sem compreensão total dos riscos. Faça sua própria análise antes de qualquer decisão.&lt;/p&gt;
  1576.  
  1577. &lt;p&gt;Para mais informações sobre padrões e endereços Bitcoin, consulte a documentação oficial da &lt;a href=&quot;https://bitcoin.org/pt_BR/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; title=&quot;Site oficial do Bitcoin&quot;&gt;Bitcoin.org&lt;/a&gt;.&lt;/p&gt;
  1578. &lt;pre&gt;&lt;code&gt;
  1579.  
  1580. # Bitcoin Address Scanner from Private Key Range
  1581. import sqlite3
  1582. import math
  1583. import hashlib
  1584. import base58
  1585. from bit import Key
  1586. from bit.format import bytes_to_wif
  1587. from decimal import Decimal, getcontext
  1588.  
  1589. # ========== Bech32 Utils (BIP173) ==========
  1590. CHARSET = &quot;qpzry9x8gf2tvdw0s3jn54khce6mua7&quot;
  1591.  
  1592. def bech32_polymod(values):
  1593.    GEN = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3]
  1594.    chk = 1
  1595.    for v in values:
  1596.        b = chk &gt;&gt; 25
  1597.        chk = ((chk &amp; 0x1ffffff) &lt;&lt; 5) ^ v
  1598.        for i in range(5):
  1599.            if (b &gt;&gt; i) &amp; 1:
  1600.                chk ^= GEN[i]
  1601.    return chk
  1602.  
  1603. def bech32_hrp_expand(hrp):
  1604.    return [ord(x) &gt;&gt; 5 for x in hrp] + [0] + [ord(x) &amp; 31 for x in hrp]
  1605.  
  1606. def bech32_create_checksum(hrp, data):
  1607.    values = bech32_hrp_expand(hrp) + data
  1608.    polymod = bech32_polymod(values + [0, 0, 0, 0, 0, 0]) ^ 1
  1609.    return [(polymod &gt;&gt; 5 * (5 - i)) &amp; 31 for i in range(6)]
  1610.  
  1611. def bech32_encode(hrp, data):
  1612.    return hrp + &#39;1&#39; + &#39;&#39;.join([CHARSET[d] for d in data + bech32_create_checksum(hrp, data)])
  1613.  
  1614. def convertbits(data, frombits, tobits, pad=True):
  1615.    acc = 0
  1616.    bits = 0
  1617.    ret = []
  1618.    maxv = (1 &lt;&lt; tobits) - 1
  1619.    for b in data:
  1620.        acc = (acc &lt;&lt; frombits) | b
  1621.        bits += frombits
  1622.        while bits &gt;= tobits:
  1623.            bits -= tobits
  1624.            ret.append((acc &gt;&gt; bits) &amp; maxv)
  1625.    if pad and bits:
  1626.        ret.append((acc &lt;&lt; (tobits - bits)) &amp; maxv)
  1627.    elif bits &gt;= frombits or ((acc &lt;&lt; (tobits - bits)) &amp; maxv):
  1628.        return None
  1629.    return ret
  1630.  
  1631. def hash160(data: bytes) -&gt; bytes:
  1632.    return hashlib.new(&#39;ripemd160&#39;, hashlib.sha256(data).digest()).digest()
  1633.  
  1634. def pubkey_to_bech32(pubkey_bytes):
  1635.    h160 = hash160(pubkey_bytes)
  1636.    return bech32_encode(&#39;bc&#39;, [0] + convertbits(h160, 8, 5))
  1637.  
  1638. def p2sh_p2wpkh_address(pubkey):
  1639.    redeem_script = b&#39;\x00\x14&#39; + hash160(pubkey)
  1640.    script_hash = hash160(redeem_script)
  1641.    addr_bytes = b&#39;\x05&#39; + script_hash
  1642.    checksum = hashlib.sha256(hashlib.sha256(addr_bytes).digest()).digest()[:4]
  1643.    return base58.b58encode(addr_bytes + checksum).decode()
  1644.  
  1645. def define_interval(privkey_hex, size=64):
  1646.    pk_int = int(privkey_hex, 16)
  1647.    base = (pk_int // size) * size
  1648.    return base, base + size - 1, pk_int
  1649.  
  1650. def main():
  1651.    getcontext().prec = 100
  1652.    privkey_hex = &quot;00000000000000000000000000000000000000000000000000000000000000e0&quot;
  1653.    low, high, pk_int = define_interval(privkey_hex)
  1654.  
  1655.    print(&quot;\n=== INTERVALO DE CHAVES PRIVADAS ===&quot;)
  1656.    print(f&quot;Hex: {privkey_hex}&quot;)
  1657.    print(f&quot;Decimal: {pk_int}&quot;)
  1658.    print(f&quot;Intervalo: {low} - {high} ({hex(low)} - {hex(high)})&quot;)
  1659.  
  1660.    # Entropia
  1661.    ln2 = Decimal(math.log(2))
  1662.    log_low = Decimal(low).ln() / ln2
  1663.    log_high = Decimal(high).ln() / ln2
  1664.    print(&quot;\n=== ENTROPIA ===&quot;)
  1665.    print(f&quot;log2(início): {log_low}&quot;)
  1666.    print(f&quot;log2(fim):    {log_high}&quot;)
  1667.    print(f&quot;Δ log2:       {log_high - log_low}&quot;)
  1668.  
  1669.    # Banco de dados
  1670.    conn = sqlite3.connect(r&quot;D:\20052025\blockchair\banco.db&quot;)
  1671.    cursor = conn.cursor()
  1672.    cursor.execute(&quot;SELECT address FROM enderecos&quot;)
  1673.    addr_set = set(row[0] for row in cursor.fetchall())
  1674.  
  1675.    print(&quot;\n=== ENDEREÇOS GERADOS ===&quot;)
  1676.    for i in range(low, high + 1):
  1677.        priv_bytes = i.to_bytes(32, &#39;big&#39;)
  1678.        wif_uncompressed = bytes_to_wif(priv_bytes, compressed=False)
  1679.        wif_compressed = bytes_to_wif(priv_bytes, compressed=True)
  1680.  
  1681.        key_un = Key(wif_uncompressed)
  1682.        key_c = Key(wif_compressed)
  1683.  
  1684.        addresses = [
  1685.            (&quot;P2PKH (não comprimido)&quot;, key_un.address),
  1686.            (&quot;P2PKH (comprimido)&quot;, key_c.address),
  1687.            (&quot;P2SH-P2WPKH&quot;, p2sh_p2wpkh_address(key_c.public_key)),
  1688.            (&quot;Bech32 (P2WPKH)&quot;, pubkey_to_bech32(key_c.public_key)),
  1689.        ]
  1690.  
  1691.        found = False
  1692.        for label, addr in addresses:
  1693.            if addr in addr_set:
  1694.                print(f&quot;{label.ljust(25)} {addr}&quot;)
  1695.                found = True
  1696.  
  1697.        if found:
  1698.            print(f&quot;{&#39;WIF não comprimido:&#39;.ljust(25)} {wif_uncompressed}&quot;)
  1699.            print(f&quot;{&#39;WIF comprimido:&#39;.ljust(25)} {wif_compressed}&quot;)
  1700.            with open(&quot;enderecos_encontrados.txt&quot;, &quot;a&quot;) as f:
  1701.                f.write(f&quot;WIF não comprimido: {wif_uncompressed}\n&quot;)
  1702.                f.write(f&quot;WIF comprimido: {wif_compressed}\n&quot;)
  1703.                for label, addr in addresses:
  1704.                    if addr in addr_set:
  1705.                        f.write(f&quot;{label}: {addr}\n&quot;)
  1706.                f.write(&quot;-&quot; * 50 + &quot;\n&quot;)
  1707.    conn.close()
  1708.  
  1709. if __name__ == &quot;__main__&quot;:
  1710.    main()
  1711. &lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;div style=&quot;text-align:center;margin:15px 0;padding:10px;background-color:#f4f4f4;border-radius:8px;&quot;&gt;
  1712.   &lt;a href=&quot;https://www.youtube.com/@canalQb&quot; style=&quot;font-size:18px;font-weight:bold;text-decoration:none;color:#1a73e8;padding:8px 16px;border:2px solid #1a73e8;border-radius:5px;transition:all 0.3s ease;&quot;&gt;
  1713.      Clique aqui para visitar o CanalQb no YouTube
  1714.   &lt;/a&gt;
  1715. &lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://canalqb.blogspot.com/feeds/3123977155233045080/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://canalqb.blogspot.com/2025/06/scanner-de-enderecos-bitcoin-partir-de.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/3123977155233045080'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/3123977155233045080'/><link rel='alternate' type='text/html' href='https://canalqb.blogspot.com/2025/06/scanner-de-enderecos-bitcoin-partir-de.html' title='Scanner de Endereços Bitcoin a partir de Faixas de Chaves Privadas'/><author><name>CanalQb</name><uri>http://www.blogger.com/profile/12641039126796028340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtt2Q0QwGuJ3OI0G29twmGKYmZvab5d8AV6fJd_HUdevW7fofyH2lDRAv39LAtg0A2x46Im5VwUT-1cfm0b4g7jgY9IKC_BbqqEV9bew_OhkddtGzaFlM4uL0LUeqS8nxK83Yufp3E6SOycslOyDA6O14vPpHRiPkTCSbb5H05NTE/s220/1QB.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s72-c/CanalQb.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5982274115355506187.post-186802667054850860</id><published>2025-06-30T15:41:00.002-03:00</published><updated>2025-07-31T12:54:50.854-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Blockchain"/><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><title type='text'>Como Gerar Entropia Hexadecimal de Frases Mnemônicas BIP39 com Python</title><content type='html'>&lt;!--Linha de separação superior--&gt;
  1716. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  1717.  
  1718. &lt;!--Link para o canal YouTube--&gt;
  1719. &lt;p style=&quot;text-align: center;&quot;&gt;
  1720.  &lt;a href=&quot;https://www.youtube.com/channel/UCdOA_1KzXHIp3gmVyyYv2sg&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot; title=&quot;Visite o @CanalQb no YouTube&quot;&gt;
  1721.    &lt;span style=&quot;font-size: 1.2em; font-weight: bold;&quot;&gt;@CanalQb no YouTube&lt;/span&gt;
  1722.  &lt;/a&gt;
  1723. &lt;/p&gt;
  1724.  
  1725. &lt;!--Linha de separação inferior--&gt;
  1726. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  1727.  
  1728. &lt;!--Imagem do canal--&gt;
  1729. &lt;div style=&quot;margin: 20px 0px; text-align: center;&quot;&gt;
  1730.  &lt;img alt=&quot;@CanalQb&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s2560/CanalQb.png&quot; style=&quot;border-radius: 10px; height: auto; max-width: 100%;&quot; /&gt;
  1731. &lt;/div&gt;
  1732.  
  1733. &lt;h2 style=&quot;text-align: center;&quot;&gt;Como Gerar Entropia Hexadecimal de Frases Mnemônicas BIP39 com Python&lt;/h2&gt;
  1734.  
  1735. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  1736.  
  1737. &lt;!--Vídeo incorporado--&gt;
  1738. &lt;div style=&quot;margin-bottom: 30px; text-align: center;&quot;&gt;
  1739.  &lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; height=&quot;450&quot; loading=&quot;lazy&quot; src=&quot;https://www.youtube.com/embed/g1dFzkx_SJA?autoplay=1&amp;amp;mute=1&amp;amp;origin=https://canalqb.blogspot.com/&amp;amp;controls=1&amp;amp;rel=0&amp;amp;enablejsapi=1&amp;amp;cc_load_policy=1&quot; title=&quot;Vídeo do @CanalQb&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;
  1740. &lt;/div&gt;
  1741. &lt;p style=&quot;color: red; font-weight: bold;&quot;&gt;
  1742. Sempre crie uma frase de segurança única para jogos, testnets ou airdrops e evite usar sua carteira principal.
  1743. &lt;/p&gt;
  1744. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 80%;&quot; /&gt;
  1745. &lt;br /&gt;
  1746. &lt;h2&gt;Como Gerar Entropia Hexadecimal de Frases Mnemônicas BIP39 com Python&lt;/h2&gt;
  1747.  
  1748. &lt;p&gt;Neste artigo, apresentamos um exemplo detalhado de como gerar a entropia em formato hexadecimal a partir de frases mnemônicas BIP39 utilizando Python. Esse processo é fundamental para quem deseja entender a criação e validação de carteiras criptográficas baseadas em padrões seguros, como o BIP39.&lt;/p&gt;
  1749.  
  1750. &lt;h3&gt;1. Introdução ao BIP39 e Entropia&lt;/h3&gt;
  1751. &lt;p&gt;O padrão &lt;strong&gt;BIP39&lt;/strong&gt; utiliza uma frase mnemônica composta por 12 a 24 palavras para representar de forma segura uma chave privada. A partir dessa frase, é possível derivar a &lt;em&gt;entropia&lt;/em&gt; original, que é um dado binário usado para gerar sementes criptográficas.&lt;/p&gt;
  1752.  
  1753. &lt;h3&gt;2. Importação e Preparação do Ambiente Python&lt;/h3&gt;
  1754. &lt;p&gt;Para manipular frases mnemônicas, usamos a biblioteca &lt;a href=&quot;https://github.com/trezor/python-mnemonic&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; title=&quot;Repositório oficial python-mnemonic&quot;&gt;python-mnemonic&lt;/a&gt;. Ela oferece funções para converter frases em entropia, validar e gerar mnemônicos.&lt;/p&gt;
  1755.  
  1756. &lt;pre&gt;&lt;code&gt;import itertools
  1757. from mnemonic import Mnemonic
  1758. &lt;/code&gt;&lt;/pre&gt;
  1759.  
  1760. &lt;h3&gt;3. Função para Gerar Entropia em Hexadecimal&lt;/h3&gt;
  1761. &lt;p&gt;Esta função recebe uma frase mnemônica e tenta gerar sua entropia em formato hexadecimal. Caso a frase não seja válida, retorna &lt;code&gt;None&lt;/code&gt;.&lt;/p&gt;
  1762.  
  1763. &lt;pre&gt;&lt;code&gt;def gerar_entropia_hex(mnemonic_phrase):
  1764.    try:
  1765.        entropy = mnemo.to_entropy(mnemonic_phrase)  # Gera a entropia binária
  1766.        hex_entropy = entropy.hex()                   # Converte para hexadecimal
  1767.        return hex_entropy
  1768.    except ValueError:
  1769.        return None  # Retorna None se a frase for inválida
  1770. &lt;/code&gt;&lt;/pre&gt;
  1771.  
  1772. &lt;h3&gt;4. Configuração do Dicionário BIP39 e Intervalo de Combinação&lt;/h3&gt;
  1773. &lt;p&gt;Criamos um objeto &lt;code&gt;Mnemonic&lt;/code&gt; para acessar o dicionário oficial em inglês com 2048 palavras e definimos intervalos para possíveis combinações mnemônicas.&lt;/p&gt;
  1774.  
  1775. &lt;pre&gt;&lt;code&gt;# Inicialização do objeto Mnemonic para inglês
  1776. mnemo = Mnemonic(&quot;english&quot;)
  1777.  
  1778. # Dicionário completo do BIP39
  1779. palavras = mnemo.wordlist
  1780.  
  1781. # Definição de intervalos para geração (exemplos)
  1782. inicio = [&quot;abandon&quot;] * 15 + [&quot;length&quot;] + [&quot;abandon&quot;] * 8
  1783. fim = [&quot;abandon&quot;] * 15 + [&quot;zoo&quot;] * 5 + [&quot;volcano&quot;]
  1784. &lt;/code&gt;&lt;/pre&gt;
  1785.  
  1786. &lt;h3&gt;5. Geração e Verificação de Frases Mnemônicas no Intervalo&lt;/h3&gt;
  1787. &lt;p&gt;Utilizamos a biblioteca &lt;code&gt;itertools&lt;/code&gt; para gerar combinações possíveis de 24 palavras do dicionário. Para cada frase gerada, verificamos se ela está dentro do intervalo definido e tentamos extrair sua entropia hexadecimal.&lt;/p&gt;
  1788.  
  1789. &lt;pre&gt;&lt;code&gt;import itertools
  1790.  
  1791. dentro_do_intervalo = False
  1792.  
  1793. for palavra in itertools.product(palavras, repeat=24):
  1794.    frase_criada = &#39; &#39;.join(palavra)
  1795.    entropia_hex = gerar_entropia_hex(frase_criada)
  1796.    
  1797.    if entropia_hex is None:
  1798.        continue  # Frase inválida, pula para a próxima
  1799.    
  1800.    # Exemplo de saída parcial para demonstração
  1801.    print(f&quot;{frase_criada[:60]}... - Entropia: {entropia_hex}&quot;)
  1802.    
  1803.    if list(palavra) == inicio:
  1804.        dentro_do_intervalo = True
  1805.        print(f&quot;Frase válida dentro do intervalo: {frase_criada} - Entropia: {entropia_hex}&quot;)
  1806.        break
  1807. &lt;/code&gt;&lt;/pre&gt;
  1808.  
  1809. &lt;h3&gt;6. Considerações Finais e Cuidados&lt;/h3&gt;
  1810. &lt;p&gt;Gerar todas as combinações possíveis de 24 palavras é computacionalmente muito custoso (2048^24 combinações). Esse exemplo tem caráter didático e serve para demonstrar como validar e converter frases mnemônicas em entropia usando Python. Para uso real, recomenda-se utilizar frases validadas e seguras, nunca compartilhar suas chaves privadas ou frases mnemônicas.&lt;/p&gt;
  1811.  
  1812. &lt;p&gt;Esse conhecimento é útil para desenvolvedores que trabalham com carteiras digitais e segurança criptográfica, ajudando a compreender melhor o funcionamento interno do BIP39 e suas aplicações práticas.&lt;/p&gt;
  1813. &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;div style=&quot;text-align:center;margin:15px 0;padding:10px;background-color:#f4f4f4;border-radius:8px;&quot;&gt;
  1814.   &lt;a href=&quot;https://www.youtube.com/@canalQb&quot; style=&quot;font-size:18px;font-weight:bold;text-decoration:none;color:#1a73e8;padding:8px 16px;border:2px solid #1a73e8;border-radius:5px;transition:all 0.3s ease;&quot;&gt;
  1815.      Clique aqui para visitar o CanalQb no YouTube
  1816.   &lt;/a&gt;
  1817. &lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://canalqb.blogspot.com/feeds/186802667054850860/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://canalqb.blogspot.com/2025/06/como-gerar-entropia-hexadecimal-de.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/186802667054850860'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/186802667054850860'/><link rel='alternate' type='text/html' href='https://canalqb.blogspot.com/2025/06/como-gerar-entropia-hexadecimal-de.html' title='Como Gerar Entropia Hexadecimal de Frases Mnemônicas BIP39 com Python'/><author><name>CanalQb</name><uri>http://www.blogger.com/profile/12641039126796028340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtt2Q0QwGuJ3OI0G29twmGKYmZvab5d8AV6fJd_HUdevW7fofyH2lDRAv39LAtg0A2x46Im5VwUT-1cfm0b4g7jgY9IKC_BbqqEV9bew_OhkddtGzaFlM4uL0LUeqS8nxK83Yufp3E6SOycslOyDA6O14vPpHRiPkTCSbb5H05NTE/s220/1QB.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s72-c/CanalQb.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5982274115355506187.post-660369149923457291</id><published>2025-06-30T15:39:00.006-03:00</published><updated>2025-07-31T12:54:47.326-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Blockchain"/><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><title type='text'>Guia Completo para Geração e Derivação de Carteiras Bitcoin com Python e BIP44</title><content type='html'>&lt;!--Linha de separação superior--&gt;
  1818. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  1819.  
  1820. &lt;!--Link para o canal YouTube--&gt;
  1821. &lt;p style=&quot;text-align: center;&quot;&gt;
  1822.  &lt;a href=&quot;https://www.youtube.com/channel/UCdOA_1KzXHIp3gmVyyYv2sg&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot; title=&quot;Visite o @CanalQb no YouTube&quot;&gt;
  1823.    &lt;span style=&quot;font-size: 1.2em; font-weight: bold;&quot;&gt;@CanalQb no YouTube&lt;/span&gt;
  1824.  &lt;/a&gt;
  1825. &lt;/p&gt;
  1826.  
  1827. &lt;!--Linha de separação inferior--&gt;
  1828. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  1829.  
  1830. &lt;!--Imagem do canal--&gt;
  1831. &lt;div style=&quot;margin: 20px 0px; text-align: center;&quot;&gt;
  1832.  &lt;img alt=&quot;@CanalQb&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s2560/CanalQb.png&quot; style=&quot;border-radius: 10px; height: auto; max-width: 100%;&quot; /&gt;
  1833. &lt;/div&gt;
  1834.  
  1835. &lt;h2 style=&quot;text-align: center;&quot;&gt;Guia Completo para Geração e Derivação de Carteiras Bitcoin com Python e BIP44&lt;/h2&gt;
  1836.  
  1837. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  1838.  
  1839. &lt;!--Vídeo incorporado--&gt;
  1840. &lt;div style=&quot;margin-bottom: 30px; text-align: center;&quot;&gt;
  1841.  &lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; height=&quot;450&quot; loading=&quot;lazy&quot; src=&quot;https://www.youtube.com/embed/g1dFzkx_SJA?autoplay=1&amp;amp;mute=1&amp;amp;origin=https://canalqb.blogspot.com/&amp;amp;controls=1&amp;amp;rel=0&amp;amp;enablejsapi=1&amp;amp;cc_load_policy=1&quot; title=&quot;Vídeo do @CanalQb&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;
  1842. &lt;/div&gt;
  1843. &lt;p style=&quot;color: red; font-weight: bold;&quot;&gt;
  1844. Sempre crie uma frase de segurança única para jogos, testnets ou airdrops e evite usar sua carteira principal.
  1845. &lt;/p&gt;
  1846. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 80%;&quot; /&gt;
  1847. &lt;br /&gt;
  1848. &lt;h2&gt;Guia Completo para Geração e Derivação de Carteiras Bitcoin com Python e BIP44&lt;/h2&gt;
  1849.  
  1850. &lt;p&gt;Neste artigo, exploraremos passo a passo como gerar e derivar carteiras Bitcoin utilizando bibliotecas Python e o padrão BIP44. Abordaremos desde a geração de seed a partir de uma frase mnemônica (mnemonic), até a criação de chaves privadas e endereços públicos em diversos formatos, sempre garantindo compatibilidade com padrões de segurança e SEO para seu blog.&lt;/p&gt;
  1851.  
  1852. &lt;h3&gt;1. Geração de Seed BIP39 a partir de Mnemonic&lt;/h3&gt;
  1853. &lt;p&gt;Utilizamos a biblioteca &lt;code&gt;bip_utils&lt;/code&gt; para gerar um seed BIP39 a partir de uma frase mnemônica. Essa seed é a base para derivar carteiras seguindo padrões hierárquicos como o BIP44.&lt;/p&gt;
  1854.  
  1855. &lt;pre&gt;&lt;code&gt;from bip_utils import Bip39SeedGenerator, Bip44, Bip44Coins, Bip44Changes
  1856.  
  1857. mnemonic = &quot;zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo vote&quot;
  1858. seed_bytes = Bip39SeedGenerator(mnemonic).Generate()
  1859. bip44_mst = Bip44.FromSeed(seed_bytes, Bip44Coins.BITCOIN)
  1860. &lt;/code&gt;&lt;/pre&gt;
  1861.  
  1862. &lt;h3&gt;2. Derivação dos Endereços Bitcoin (BIP44)&lt;/h3&gt;
  1863. &lt;p&gt;Com o seed gerado, criamos uma carteira BIP44 para Bitcoin e derivamos os 50 primeiros endereços na cadeia externa (recebimento).&lt;/p&gt;
  1864.  
  1865. &lt;pre&gt;&lt;code&gt;account = bip44_mst.Purpose().Coin().Account(0)
  1866. change = account.Change(Bip44Changes.CHAIN_EXT)
  1867.  
  1868. for i in range(50):
  1869.    addr = change.AddressIndex(i)
  1870.    print(f&quot;{addr.PrivateKey().ToWif()} - {addr.PublicKey().ToAddress()}&quot;)
  1871.    print(f&quot;p2wpkh-p2sh:{addr.PrivateKey().ToWif()} - {addr.PublicKey().ToAddress()}&quot;)
  1872.    print(f&quot;p2wpkh:{addr.PrivateKey().ToWif()} - {addr.PublicKey().ToAddress()}&quot;)
  1873. &lt;/code&gt;&lt;/pre&gt;
  1874.  
  1875. &lt;h3&gt;3. Validação de Frases Mnemônicas&lt;/h3&gt;
  1876. &lt;p&gt;Utilizando a biblioteca &lt;code&gt;mnemonic&lt;/code&gt;, é possível validar frases mnemônicas. No exemplo abaixo, testamos frases variando a última palavra para identificar uma válida.&lt;/p&gt;
  1877.  
  1878. &lt;pre&gt;&lt;code&gt;from mnemonic import Mnemonic
  1879.  
  1880. mnemo = Mnemonic(&quot;english&quot;)
  1881. wordlist = mnemo.wordlist
  1882. fixed_part = [&quot;zoo&quot;] * 23
  1883.  
  1884. for last_word in wordlist:
  1885.    phrase_words = fixed_part + [last_word]
  1886.    phrase = &quot; &quot;.join(phrase_words)
  1887.    if mnemo.check(phrase):
  1888.        print(f&quot;Frase válida encontrada:\n{phrase}&quot;)
  1889. &lt;/code&gt;&lt;/pre&gt;
  1890.  
  1891. &lt;h3&gt;4. Derivação Manual com BIP32 e Chaves Hardened&lt;/h3&gt;
  1892. &lt;p&gt;Exemplo avançado com derivação BIP32, usando HMAC e curve secp256k1, incluindo geração de chaves privadas e públicas, além de endereços em formato WIF comprimido.&lt;/p&gt;
  1893.  
  1894. &lt;pre&gt;&lt;code&gt;import hmac
  1895. import hashlib
  1896. import struct
  1897. from ecdsa import SECP256k1
  1898. from binascii import hexlify, unhexlify
  1899. from bit import Key
  1900.  
  1901. seed_hex = &quot;02e0a8b039282faf6fe0fd769cfbc4b6b4cf8758ba68220eac420e32b91ddfa673&quot;
  1902. seed = unhexlify(seed_hex)
  1903.  
  1904. def bip32_master_key(seed):
  1905.    I = hmac.new(b&quot;Bitcoin seed&quot;, seed, hashlib.sha512).digest()
  1906.    IL, IR = I[:32], I[32:]
  1907.    return IL, IR
  1908.  
  1909. def bip32_ckd_hardened(privkey, chaincode, index):
  1910.    hardened_index = index + 0x80000000
  1911.    data = b&#39;\x00&#39; + privkey + struct.pack(&quot;&gt;L&quot;, hardened_index)
  1912.    I = hmac.new(chaincode, data, hashlib.sha512).digest()
  1913.    IL, IR = I[:32], I[32:]
  1914.    curve_order = SECP256k1.order
  1915.    priv_int = int.from_bytes(privkey, &#39;big&#39;)
  1916.    IL_int = int.from_bytes(IL, &#39;big&#39;)
  1917.    child_priv_int = (IL_int + priv_int) % curve_order
  1918.    child_privkey = child_priv_int.to_bytes(32, &#39;big&#39;)
  1919.    child_chaincode = IR
  1920.    return child_privkey, child_chaincode
  1921.  
  1922. master_privkey, master_chaincode = bip32_master_key(seed)
  1923. for i in range(10):
  1924.    child_privkey, child_chaincode = bip32_ckd_hardened(master_privkey, master_chaincode, i)
  1925.    key = Key.from_bytes(child_privkey)
  1926.    print(f&quot;{key.to_wif()} - Address: {key.address}&quot;)
  1927.    print(f&quot;p2wpkh-p2sh:{key.to_wif()} - Address: {key.address}&quot;)
  1928.    print(f&quot;p2wpkh:{key.to_wif()} - Address: {key.address}&quot;)
  1929. &lt;/code&gt;&lt;/pre&gt;
  1930.  
  1931. &lt;h3&gt;5. Conversão entre Chaves WIF e WIF Comprimido&lt;/h3&gt;
  1932. &lt;p&gt;Funções para conversão de chaves privadas no formato WIF para o formato comprimido, usando Base58 e checksum SHA-256 duplo.&lt;/p&gt;
  1933.  
  1934. &lt;pre&gt;&lt;code&gt;import hashlib
  1935.  
  1936. BASE58_ALPHABET = &#39;123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz&#39;
  1937.  
  1938. def base58_decode(s):
  1939.    num = 0
  1940.    for c in s:
  1941.        num *= 58
  1942.        num += BASE58_ALPHABET.index(c)
  1943.    byte_length = (num.bit_length() + 7) // 8
  1944.    decoded = num.to_bytes(byte_length, byteorder=&#39;big&#39;)
  1945.    n_pad = len(s) - len(s.lstrip(&#39;1&#39;))
  1946.    return b&#39;\x00&#39; * n_pad + decoded
  1947.  
  1948. def base58_encode(b):
  1949.    num = int.from_bytes(b, byteorder=&#39;big&#39;)
  1950.    encode = &#39;&#39;
  1951.    while num &gt; 0:
  1952.        num, rem = divmod(num, 58)
  1953.        encode = BASE58_ALPHABET[rem] + encode
  1954.    n_pad = 0
  1955.    for byte in b:
  1956.        if byte == 0:
  1957.            n_pad += 1
  1958.        else:
  1959.            break
  1960.    return &#39;1&#39; * n_pad + encode
  1961.  
  1962. def wif_to_compressed_wif(wif):
  1963.    decoded = base58_decode(wif)
  1964.    if decoded[0] != 0x80:
  1965.        raise ValueError(&quot;Prefixo inválido, não é uma chave WIF válida&quot;)
  1966.    priv_key = decoded[1:33]
  1967.    compressed = b&#39;\x80&#39; + priv_key + b&#39;\x01&#39;
  1968.    checksum = hashlib.sha256(hashlib.sha256(compressed).digest()).digest()[:4]
  1969.    final = compressed + checksum
  1970.    return base58_encode(final)
  1971.  
  1972. wifs = [&quot;5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ&quot;]
  1973.  
  1974. for wif in wifs:
  1975.    try:
  1976.        compressed = wif_to_compressed_wif(wif)
  1977.        print(f&quot;{wif}  -&gt;  {compressed}&quot;)
  1978.        print(f&quot;p2wpkh-p2sh:{compressed}&quot;)
  1979.        print(f&quot;p2wpkh:{compressed}&quot;)
  1980.    except Exception as e:
  1981.        print(f&quot;Erro ao converter {wif}: {e}&quot;)
  1982. &lt;/code&gt;&lt;/pre&gt;
  1983.  
  1984. &lt;h3&gt;6. Operações com Curva Elíptica secp256k1&lt;/h3&gt;
  1985. &lt;p&gt;Implementação de funções para operações matemáticas essenciais na curva secp256k1, incluindo inverso modular, adição de pontos, multiplicação escalar, e geração de endereços Bitcoin.&lt;/p&gt;
  1986.  
  1987. &lt;pre&gt;&lt;code&gt;import hashlib
  1988. import random
  1989.  
  1990. p = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F
  1991. n = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141
  1992. G = (55066263022277343669578718895168534326250603453777594175500187360389116729240,
  1993.     32670510020758816978083085130507043184471273380659243275938904335757337482424)
  1994.  
  1995. def modinv(a, p):
  1996.    if a == 0:
  1997.        raise ZeroDivisionError(&#39;division by zero&#39;)
  1998.    lm, hm = 1, 0
  1999.    low, high = a % p, p
  2000.    while low &gt; 1:
  2001.        r = high // low
  2002.        nm, new = hm - lm * r, high - low * r
  2003.        lm, low, hm, high = nm, new, lm, low
  2004.    return lm % p
  2005.  
  2006. def point_add(P1, P2):
  2007.    if P1 is None:
  2008.        return P2
  2009.    if P2 is None:
  2010.        return P1
  2011.    x1, y1 = P1
  2012.    x2, y2 = P2
  2013.    if x1 == x2 and y1 != y2:
  2014.        return None
  2015.    if P1 == P2:
  2016.        num = (3 * x1 * x1) % p
  2017.        den = modinv(2 * y1, p)
  2018.        lam = (num * den) % p
  2019.    else:
  2020.        num = (y2 - y1) % p
  2021.        den = modinv(x2 - x1, p)
  2022.        lam = (num * den) % p
  2023.    x3 = (lam * lam - x1 - x2) % p
  2024.    y3 = (lam * (x1 - x3) - y1) % p
  2025.    return (x3, y3)
  2026.  
  2027. def scalar_mult(k, P):
  2028.    result = None
  2029.    addend = P
  2030.    while k &gt; 0:
  2031.        if k &amp; 1:
  2032.            result = point_add(result, addend)
  2033.        addend = point_add(addend, addend)
  2034.        k &gt;&gt;= 1
  2035.    return result
  2036.  
  2037. # Exemplos de geração de chaves e endereços podem ser adicionados conforme necessidade.
  2038. &lt;/code&gt;&lt;/pre&gt;
  2039.  
  2040. &lt;h3&gt;7. Previsão de Valores para Validação Extra&lt;/h3&gt;
  2041. &lt;p&gt;Exemplo simples de função para testar valores até encontrar um valor que gere um hash SHA-256 específico (simulação de brute-force).&lt;/p&gt;
  2042.  
  2043. &lt;pre&gt;&lt;code&gt;import hashlib
  2044.  
  2045. def brute_force_sha256(target_hash_hex):
  2046.    target_hash = bytes.fromhex(target_hash_hex)
  2047.    value = 0
  2048.    while True:
  2049.        val_bytes = value.to_bytes(1, &#39;big&#39;)
  2050.        if hashlib.sha256(val_bytes).digest() == target_hash:
  2051.            return value
  2052.        value += 1
  2053.  
  2054. target = &quot;0000000000000000000000000000000000000000000000000000000000000000&quot;
  2055. print(f&quot;Valor encontrado: {brute_force_sha256(target)}&quot;)
  2056. &lt;/code&gt;&lt;/pre&gt;
  2057.  
  2058. &lt;p&gt;Esperamos que este guia ajude você a entender e aplicar a geração e derivação de carteiras Bitcoin com Python, assim como técnicas avançadas de criptografia e manipulação de chaves.&lt;/p&gt;
  2059. &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;div style=&quot;text-align:center;margin:15px 0;padding:10px;background-color:#f4f4f4;border-radius:8px;&quot;&gt;
  2060.   &lt;a href=&quot;https://www.youtube.com/@canalQb&quot; style=&quot;font-size:18px;font-weight:bold;text-decoration:none;color:#1a73e8;padding:8px 16px;border:2px solid #1a73e8;border-radius:5px;transition:all 0.3s ease;&quot;&gt;
  2061.      Clique aqui para visitar o CanalQb no YouTube
  2062.   &lt;/a&gt;
  2063. &lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://canalqb.blogspot.com/feeds/660369149923457291/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://canalqb.blogspot.com/2025/06/guia-completo-para-geracao-e-derivacao.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/660369149923457291'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/660369149923457291'/><link rel='alternate' type='text/html' href='https://canalqb.blogspot.com/2025/06/guia-completo-para-geracao-e-derivacao.html' title='Guia Completo para Geração e Derivação de Carteiras Bitcoin com Python e BIP44'/><author><name>CanalQb</name><uri>http://www.blogger.com/profile/12641039126796028340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtt2Q0QwGuJ3OI0G29twmGKYmZvab5d8AV6fJd_HUdevW7fofyH2lDRAv39LAtg0A2x46Im5VwUT-1cfm0b4g7jgY9IKC_BbqqEV9bew_OhkddtGzaFlM4uL0LUeqS8nxK83Yufp3E6SOycslOyDA6O14vPpHRiPkTCSbb5H05NTE/s220/1QB.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s72-c/CanalQb.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5982274115355506187.post-795324214902774957</id><published>2025-06-30T15:38:00.004-03:00</published><updated>2025-07-31T12:54:44.637-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Blockchain"/><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><title type='text'>Análise Gráfica em Python: Cálculo do Ângulo entre Tangentes de Curvas</title><content type='html'>&lt;!--Linha de separação superior--&gt;
  2064. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  2065.  
  2066. &lt;!--Link para o canal YouTube--&gt;
  2067. &lt;p style=&quot;text-align: center;&quot;&gt;
  2068.  &lt;a href=&quot;https://www.youtube.com/channel/UCdOA_1KzXHIp3gmVyyYv2sg&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot; title=&quot;Visite o @CanalQb no YouTube&quot;&gt;
  2069.    &lt;span style=&quot;font-size: 1.2em; font-weight: bold;&quot;&gt;@CanalQb no YouTube&lt;/span&gt;
  2070.  &lt;/a&gt;
  2071. &lt;/p&gt;
  2072.  
  2073. &lt;!--Linha de separação inferior--&gt;
  2074. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  2075.  
  2076. &lt;!--Imagem do canal--&gt;
  2077. &lt;div style=&quot;margin: 20px 0px; text-align: center;&quot;&gt;
  2078.  &lt;img alt=&quot;@CanalQb&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s2560/CanalQb.png&quot; style=&quot;border-radius: 10px; height: auto; max-width: 100%;&quot; /&gt;
  2079. &lt;/div&gt;
  2080.  
  2081. &lt;h2 style=&quot;text-align: center;&quot;&gt;Análise Gráfica em Python: Cálculo do Ângulo entre Tangentes de Curvas&lt;/h2&gt;
  2082.  
  2083. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  2084.  
  2085. &lt;!--Vídeo incorporado--&gt;
  2086. &lt;div style=&quot;margin-bottom: 30px; text-align: center;&quot;&gt;
  2087.  &lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; height=&quot;450&quot; loading=&quot;lazy&quot; src=&quot;https://www.youtube.com/embed/g1dFzkx_SJA?autoplay=1&amp;amp;mute=1&amp;amp;origin=https://canalqb.blogspot.com/&amp;amp;controls=1&amp;amp;rel=0&amp;amp;enablejsapi=1&amp;amp;cc_load_policy=1&quot; title=&quot;Vídeo do @CanalQb&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;
  2088. &lt;/div&gt;
  2089. &lt;p style=&quot;color: red; font-weight: bold;&quot;&gt;
  2090. Sempre crie uma frase de segurança única para jogos, testnets ou airdrops e evite usar sua carteira principal.
  2091. &lt;/p&gt;
  2092. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 80%;&quot; /&gt;
  2093. &lt;br /&gt;
  2094. &lt;h2&gt;Análise Gráfica em Python: Cálculo do Ângulo entre Tangentes de Curvas&lt;/h2&gt;
  2095.  
  2096. &lt;p&gt;Este artigo apresenta uma abordagem detalhada para análise gráfica utilizando Python, focando no cálculo do ângulo entre tangentes de duas curvas derivadas de conjuntos de dados numéricos. Utilizamos bibliotecas populares como &lt;code&gt;numpy&lt;/code&gt; e &lt;code&gt;matplotlib&lt;/code&gt; para manipulação de dados e visualização, explorando conceitos fundamentais de derivadas aproximadas para estimar taxas de variação.&lt;/p&gt;
  2097.  
  2098. &lt;h3&gt;Contexto dos Dados&lt;/h3&gt;
  2099. &lt;p&gt;Temos três conjuntos principais de dados numéricos:&lt;/p&gt;
  2100. &lt;ul&gt;
  2101.  &lt;li&gt;&lt;strong&gt;Coluna 1 (A):&lt;/strong&gt; valores de referência, numa escala exponencial, começando em 65.536 e chegando a 33.554.432.&lt;/li&gt;
  2102.  &lt;li&gt;&lt;strong&gt;Coluna 2 (B):&lt;/strong&gt; valores calculados por uma fórmula linear aproximada: &lt;code&gt;B = k * A + m&lt;/code&gt;, com constantes &lt;code&gt;k = 1.237&lt;/code&gt; e &lt;code&gt;m = 150&lt;/code&gt;.&lt;/li&gt;
  2103.  &lt;li&gt;&lt;strong&gt;Coluna 3 (C):&lt;/strong&gt; valores originais &quot;procurados&quot; para comparação.&lt;/li&gt;
  2104.  &lt;li&gt;&lt;strong&gt;Coluna Comparar:&lt;/strong&gt; valores adicionais para análise complementar.&lt;/li&gt;
  2105. &lt;/ul&gt;
  2106.  
  2107. &lt;h3&gt;Cálculo da Derivada Aproximada&lt;/h3&gt;
  2108. &lt;p&gt;A derivada aproximada é calculada para as curvas das Colunas 2 e 3, a fim de determinar as taxas de variação relativas dos dados com base nos incrementos de Coluna 1. A fórmula usada é:&lt;/p&gt;
  2109. &lt;p&gt;&lt;code&gt;derivada ≈ (y[i+1] - y[i]) / (x[i+1] - x[i])&lt;/code&gt;&lt;/p&gt;
  2110.  
  2111. &lt;h3&gt;Cálculo do Ângulo entre Tangentes&lt;/h3&gt;
  2112. &lt;p&gt;Com as derivadas calculadas para ambas as curvas, estimamos o ângulo entre as tangentes no ponto médio dos dados, utilizando a fórmula matemática para o ângulo entre duas retas com declives &lt;code&gt;m1&lt;/code&gt; e &lt;code&gt;m2&lt;/code&gt;:&lt;/p&gt;
  2113. &lt;p&gt;&lt;code&gt;tan(θ) = |(m1 - m2) / (1 + m1 * m2)|&lt;/code&gt;&lt;/p&gt;
  2114. &lt;p&gt;O ângulo &lt;code&gt;θ&lt;/code&gt; é então convertido de radianos para graus para facilitar a interpretação.&lt;/p&gt;
  2115.  
  2116. &lt;h3&gt;Visualização Gráfica&lt;/h3&gt;
  2117. &lt;p&gt;Para melhor compreensão, geramos um gráfico com os seguintes elementos:&lt;/p&gt;
  2118. &lt;ul&gt;
  2119.  &lt;li&gt;Curvas das Colunas 2 (calculada) e 3 (original) com marcadores e cores distintas.&lt;/li&gt;
  2120.  &lt;li&gt;Valores numéricos posicionados estrategicamente para fácil leitura.&lt;/li&gt;
  2121.  &lt;li&gt;Uma linha verde pontilhada indicando a diferença vertical no ponto médio.&lt;/li&gt;
  2122.  &lt;li&gt;Um arco representando visualmente o ângulo calculado entre as tangentes.&lt;/li&gt;
  2123.  &lt;li&gt;Texto indicando o valor do ângulo no gráfico.&lt;/li&gt;
  2124. &lt;/ul&gt;
  2125.  
  2126. &lt;h3&gt;Exemplo Completo do Código Python&lt;/h3&gt;
  2127. &lt;pre&gt;&lt;code&gt;import numpy as np
  2128. import matplotlib.pyplot as plt
  2129. import math
  2130. from matplotlib.patches import Arc
  2131.  
  2132. # Dados fornecidos
  2133. coluna1 = np.array([65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432])  # &quot;Inicio&quot;
  2134. coluna3 = np.array([131071, 262143, 524287, 1048575, 2097151, 4194303, 8388607, 16777215, 33554431, 67108863])  # &quot;Procurado&quot;
  2135. comparar = np.array([95823, 198669, 357535, 863317, 1811764, 3007503, 5598802, 14428676, 33185509, 54538862])
  2136.  
  2137. # Fórmula aproximada para calcular Coluna 2 (B)
  2138. k = 1.237
  2139. m = 150
  2140. coluna2_calculada = k * coluna1 + m
  2141.  
  2142. # Exibindo os resultados
  2143. for i in range(len(coluna1)):
  2144.    print(f&quot;Coluna 1 (A): {coluna1[i]:.0f}, Coluna 2 calculada (B): {coluna2_calculada[i]:.0f}, Coluna 3 (C): {coluna3[i]:.0f}, Coluna Comparar: {comparar[i]:.0f}&quot;)
  2145.  
  2146. def derivada_aproximada(y, x):
  2147.    return (y[1:] - y[:-1]) / (x[1:] - x[:-1])
  2148.  
  2149. derivada_b = derivada_aproximada(coluna2_calculada, coluna1)
  2150. derivada_c = derivada_aproximada(coluna3, coluna1)
  2151.  
  2152. mid_index = len(coluna1) // 2
  2153. x_mid = coluna1[mid_index]
  2154. y_mid_b = coluna2_calculada[mid_index]
  2155. y_mid_c = coluna3[mid_index]
  2156.  
  2157. m1 = derivada_b[mid_index-1]
  2158. m2 = derivada_c[mid_index-1]
  2159.  
  2160. tan_theta = abs((m1 - m2) / (1 + m1 * m2))
  2161. angle_rad = math.atan(tan_theta)
  2162. angle_deg = math.degrees(angle_rad)
  2163.  
  2164. font_size = 8
  2165. line_length = 3e4
  2166.  
  2167. plt.figure(figsize=(8, 5))
  2168. plt.plot(coluna1, coluna2_calculada, label=&quot;Coluna 2 Calculada (B)&quot;, marker=&quot;o&quot;, color=&#39;b&#39;)
  2169. plt.plot(coluna1, coluna3, label=&quot;Coluna 3 (C) Original&quot;, marker=&quot;x&quot;, color=&#39;r&#39;)
  2170.  
  2171. for i in range(len(coluna1)):
  2172.    plt.text(coluna1[i], coluna2_calculada[i] - 100, f&#39;{coluna2_calculada[i]:.0f}&#39;, fontsize=font_size, color=&#39;blue&#39;, ha=&#39;center&#39;, va=&#39;top&#39;)
  2173.  
  2174. for i in range(len(coluna1)):
  2175.    plt.text(coluna1[i], coluna3[i] + 100, f&#39;{coluna3[i]:.0f}&#39;, fontsize=font_size, color=&#39;red&#39;, ha=&#39;center&#39;, va=&#39;bottom&#39;)
  2176.  
  2177. plt.plot([x_mid, x_mid], [y_mid_b, y_mid_c], color=&#39;green&#39;, linestyle=&#39;--&#39;)
  2178.  
  2179. radius = abs(y_mid_b - y_mid_c) / 2
  2180. arc = Arc([x_mid, (y_mid_b + y_mid_c) / 2], width=radius*2, height=radius*2, angle=0, theta1=0, theta2=angle_deg, color=&#39;green&#39;, lw=2)
  2181. plt.gca().add_patch(arc)
  2182.  
  2183. angle_text_y = (y_mid_b + y_mid_c) / 2 + (y_mid_b - y_mid_c) / 10
  2184. plt.text(x_mid+2, angle_text_y+2, f&#39;Ângulo: {angle_deg:.2f}°&#39;, fontsize=font_size, color=&#39;green&#39;, ha=&#39;center&#39;)
  2185.  
  2186. plt.plot([x_mid - line_length, x_mid + line_length], [y_mid_b, y_mid_c], color=&#39;green&#39;, linestyle=&#39;-&#39;, lw=2)
  2187.  
  2188. plt.xlim(0, 35000000)
  2189. plt.ylim(0, 35000000)
  2190.  
  2191. plt.title(&quot;Relação entre Colunas 1, 2 e 3 com Ângulo entre Tangentes&quot;, fontsize=font_size)
  2192. plt.xlabel(&quot;Coluna 1 (A)&quot;, fontsize=font_size)
  2193. plt.ylabel(&quot;Valores&quot;, fontsize=font_size)
  2194. plt.legend(fontsize=font_size)
  2195. plt.grid()
  2196. plt.show()
  2197.  
  2198. print(f&quot;Ângulo entre as tangentes (em graus): {angle_deg:.2f}&quot;)
  2199. &lt;/code&gt;&lt;/pre&gt;
  2200.  
  2201. &lt;h3&gt;Importância e Aplicações&lt;/h3&gt;
  2202. &lt;p&gt;Este método é útil em análise de dados, engenharia e ciência, onde é necessário entender a variação relativa entre curvas e identificar pontos de interesse, como mudanças de comportamento. O cálculo do ângulo entre tangentes oferece uma visão geométrica importante sobre a relação entre as funções.&lt;/p&gt;
  2203.  
  2204. &lt;h3&gt;Referências&lt;/h3&gt;
  2205. &lt;ul&gt;
  2206.  &lt;li&gt;&lt;a href=&quot;https://numpy.org/&quot; title=&quot;Numpy Official Site&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Numpy - Biblioteca para cálculo numérico em Python&lt;/a&gt;&lt;/li&gt;
  2207.  &lt;li&gt;&lt;a href=&quot;https://matplotlib.org/&quot; title=&quot;Matplotlib Official Site&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Matplotlib - Biblioteca para criação de gráficos em Python&lt;/a&gt;&lt;/li&gt;
  2208.  &lt;li&gt;&lt;a href=&quot;https://docs.python.org/3/library/math.html&quot; title=&quot;Python math module&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Módulo math do Python&lt;/a&gt;&lt;/li&gt;
  2209. &lt;/ul&gt;
  2210. &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;div style=&quot;text-align:center;margin:15px 0;padding:10px;background-color:#f4f4f4;border-radius:8px;&quot;&gt;
  2211.   &lt;a href=&quot;https://www.youtube.com/@canalQb&quot; style=&quot;font-size:18px;font-weight:bold;text-decoration:none;color:#1a73e8;padding:8px 16px;border:2px solid #1a73e8;border-radius:5px;transition:all 0.3s ease;&quot;&gt;
  2212.      Clique aqui para visitar o CanalQb no YouTube
  2213.   &lt;/a&gt;
  2214. &lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://canalqb.blogspot.com/feeds/795324214902774957/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://canalqb.blogspot.com/2025/06/analise-grafica-em-python-calculo-do.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/795324214902774957'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/795324214902774957'/><link rel='alternate' type='text/html' href='https://canalqb.blogspot.com/2025/06/analise-grafica-em-python-calculo-do.html' title='Análise Gráfica em Python: Cálculo do Ângulo entre Tangentes de Curvas'/><author><name>CanalQb</name><uri>http://www.blogger.com/profile/12641039126796028340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtt2Q0QwGuJ3OI0G29twmGKYmZvab5d8AV6fJd_HUdevW7fofyH2lDRAv39LAtg0A2x46Im5VwUT-1cfm0b4g7jgY9IKC_BbqqEV9bew_OhkddtGzaFlM4uL0LUeqS8nxK83Yufp3E6SOycslOyDA6O14vPpHRiPkTCSbb5H05NTE/s220/1QB.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s72-c/CanalQb.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5982274115355506187.post-925555674565584662</id><published>2025-06-30T15:37:00.001-03:00</published><updated>2025-07-31T12:54:41.661-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Blockchain"/><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><title type='text'>Como Codificar e Decodificar Base58 em Python: Guia Completo</title><content type='html'>&lt;!--Linha de separação superior--&gt;
  2215. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  2216.  
  2217. &lt;!--Link para o canal YouTube--&gt;
  2218. &lt;p style=&quot;text-align: center;&quot;&gt;
  2219.  &lt;a href=&quot;https://www.youtube.com/channel/UCdOA_1KzXHIp3gmVyyYv2sg&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot; title=&quot;Visite o @CanalQb no YouTube&quot;&gt;
  2220.    &lt;span style=&quot;font-size: 1.2em; font-weight: bold;&quot;&gt;@CanalQb no YouTube&lt;/span&gt;
  2221.  &lt;/a&gt;
  2222. &lt;/p&gt;
  2223.  
  2224. &lt;!--Linha de separação inferior--&gt;
  2225. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  2226.  
  2227. &lt;!--Imagem do canal--&gt;
  2228. &lt;div style=&quot;margin: 20px 0px; text-align: center;&quot;&gt;
  2229.  &lt;img alt=&quot;@CanalQb&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s2560/CanalQb.png&quot; style=&quot;border-radius: 10px; height: auto; max-width: 100%;&quot; /&gt;
  2230. &lt;/div&gt;
  2231.  
  2232. &lt;h2 style=&quot;text-align: center;&quot;&gt;Como Usar a Testnet Chainphon e se Preparar para o Lançamento Oficial&lt;/h2&gt;
  2233.  
  2234. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  2235.  
  2236. &lt;!--Vídeo incorporado--&gt;
  2237. &lt;div style=&quot;margin-bottom: 30px; text-align: center;&quot;&gt;
  2238.  &lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; height=&quot;450&quot; loading=&quot;lazy&quot; src=&quot;https://www.youtube.com/embed/g1dFzkx_SJA?autoplay=1&amp;amp;mute=1&amp;amp;origin=https://canalqb.blogspot.com/&amp;amp;controls=1&amp;amp;rel=0&amp;amp;enablejsapi=1&amp;amp;cc_load_policy=1&quot; title=&quot;Vídeo do @CanalQb&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;
  2239. &lt;/div&gt;
  2240. &lt;p style=&quot;color: red; font-weight: bold;&quot;&gt;
  2241. Sempre crie uma frase de segurança única para jogos, testnets ou airdrops e evite usar sua carteira principal.
  2242. &lt;/p&gt;
  2243. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 80%;&quot; /&gt;
  2244. &lt;br /&gt;
  2245. &lt;h2&gt;Como Codificar e Decodificar Base58 em Python: Guia Completo&lt;/h2&gt;
  2246.  
  2247. &lt;p&gt;A codificação Base58 é amplamente utilizada em sistemas que precisam representar dados binários de forma compacta e amigável, especialmente no universo das criptomoedas, como Bitcoin. Este método evita caracteres ambíguos para melhorar a legibilidade, eliminando zeros à esquerda e caracteres confusos, como &#39;0&#39;, &#39;O&#39;, &#39;I&#39; e &#39;l&#39;.&lt;/p&gt;
  2248.  
  2249. &lt;h3&gt;O que é Base58?&lt;/h3&gt;
  2250. &lt;p&gt;Base58 é um esquema de codificação que usa um conjunto de 58 caracteres específicos: números e letras que evitam caracteres visuais semelhantes para evitar confusões em transações financeiras, endereços de carteiras e chaves.&lt;/p&gt;
  2251.  
  2252. &lt;p&gt;Os caracteres usados são:&lt;/p&gt;
  2253. &lt;p&gt;&lt;code&gt;123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz&lt;/code&gt;&lt;/p&gt;
  2254.  
  2255. &lt;h3&gt;Implementação em Python&lt;/h3&gt;
  2256.  
  2257. &lt;p&gt;A seguir, apresentamos um código completo em Python para codificação e decodificação Base58, baseado na implementação popular do &lt;a href=&quot;https://github.com/jgarzik/python-bitcoinlib&quot; title=&quot;python-bitcoinlib no GitHub&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;python-bitcoinlib&lt;/a&gt; e testado com vetores de teste oficiais do &lt;a href=&quot;https://tools.ietf.org/html/draft-msporny-base58-01&quot; title=&quot;Base58 draft specification&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;draft Base58&lt;/a&gt;.&lt;/p&gt;
  2258.  
  2259. &lt;pre&gt;&lt;code&gt;from binascii import hexlify
  2260.  
  2261. DIGITS = b&#39;123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz&#39;
  2262.  
  2263. def encode(bytestring):
  2264.    &quot;&quot;&quot;
  2265.    Codificador Base58.
  2266.  
  2267.    Converte o bytestring inteiro para um inteiro e codifica em Base58.
  2268.    Preserva zeros à esquerda.
  2269.    &quot;&quot;&quot;
  2270.    padding = DIGITS[0:1] * (len(bytestring) - len(bytestring.lstrip(b&#39;\0&#39;)))
  2271.    try:
  2272.        number = int.from_bytes(bytestring, &#39;big&#39;)
  2273.    except AttributeError:
  2274.        number = int(hexlify(bytestring), 16)
  2275.    encoded = b&#39;&#39;
  2276.    while number:
  2277.        number, remainder = divmod(number, 58)
  2278.        encoded += DIGITS[remainder:remainder + 1]
  2279.    return bytes(padding + encoded[::-1])
  2280.  
  2281. def decode(bytestring):
  2282.    &quot;&quot;&quot;
  2283.    Decodificador Base58.
  2284.  
  2285.    Converte uma string Base58 de volta para bytes.
  2286.    Preserva zeros à esquerda.
  2287.    &quot;&quot;&quot;
  2288.    clean = bytestring.lstrip(DIGITS[0:1])
  2289.    padding = b&#39;\0&#39; * (len(bytestring) - len(clean))
  2290.    number = 0
  2291.    try:
  2292.        for byte in clean:
  2293.            number = (number * 58) + DIGITS.index(byte)
  2294.    except IndexError:
  2295.        raise ValueError(f&quot;{byte!r} não é um dígito válido em Base58&quot;)
  2296.    output = bytearray()
  2297.    while number:
  2298.        number, byte = divmod(number, 256)
  2299.        output.insert(0, byte)
  2300.    return bytes(padding + output)
  2301. &lt;/code&gt;&lt;/pre&gt;
  2302.  
  2303. &lt;h3&gt;Exemplos de Uso&lt;/h3&gt;
  2304. &lt;ul&gt;
  2305.  &lt;li&gt;&lt;code&gt;encode(b&#39;Hello World!&#39;)&lt;/code&gt; retorna &lt;code&gt;b&#39;2NEpo7TZRRrLZSi2U&#39;&lt;/code&gt;&lt;/li&gt;
  2306.  &lt;li&gt;&lt;code&gt;encode(b&#39;The quick brown fox jumps over the lazy dog.&#39;)&lt;/code&gt; retorna uma string Base58 longa e segura&lt;/li&gt;
  2307.  &lt;li&gt;&lt;code&gt;decode(encode(b&#39;\x00\x00\x28\x7f\xb4\xcd&#39;))&lt;/code&gt; retorna os bytes originais &lt;code&gt;b&#39;\x00\x00(\x7f\xb4\xcd&#39;&lt;/code&gt;&lt;/li&gt;
  2308. &lt;/ul&gt;
  2309.  
  2310. &lt;h3&gt;Detalhes Técnicos Importantes&lt;/h3&gt;
  2311. &lt;ul&gt;
  2312.  &lt;li&gt;Preservação de zeros à esquerda para manter a integridade dos dados originais.&lt;/li&gt;
  2313.  &lt;li&gt;Uso do método &lt;code&gt;int.from_bytes&lt;/code&gt; para converter o bytestring em número inteiro para codificação.&lt;/li&gt;
  2314.  &lt;li&gt;Exceções tratadas para garantir que somente caracteres válidos sejam decodificados.&lt;/li&gt;
  2315. &lt;/ul&gt;
  2316.  
  2317. &lt;h3&gt;Contexto e Aplicações&lt;/h3&gt;
  2318. &lt;p&gt;Base58 é essencial em sistemas de blockchain e criptomoedas para a criação de endereços públicos e chaves, garantindo que os dados possam ser compartilhados sem erros de digitação. Além disso, sua forma compacta ajuda a reduzir o tamanho das informações transmitidas.&lt;/p&gt;
  2319.  
  2320. &lt;h3&gt;Referências e Links Oficiais&lt;/h3&gt;
  2321. &lt;ul&gt;
  2322.  &lt;li&gt;&lt;a href=&quot;https://github.com/jgarzik/python-bitcoinlib/blob/master/bitcoin/base58.py&quot; title=&quot;Código Base58 python-bitcoinlib&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;python-bitcoinlib Base58 Implementation&lt;/a&gt;&lt;/li&gt;
  2323.  &lt;li&gt;&lt;a href=&quot;https://tools.ietf.org/html/draft-msporny-base58-01&quot; title=&quot;Base58 Specification Draft&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Especificação oficial Base58&lt;/a&gt;&lt;/li&gt;
  2324.  &lt;li&gt;&lt;a href=&quot;https://docs.python.org/3/library/binascii.html&quot; title=&quot;Python binascii&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Módulo binascii - Python&lt;/a&gt;&lt;/li&gt;
  2325. &lt;/ul&gt;
  2326.  
  2327. &lt;h3&gt;Considerações Finais&lt;/h3&gt;
  2328. &lt;p&gt;Com este guia, você pode facilmente integrar codificação e decodificação Base58 em seus projetos Python, seja para sistemas financeiros, blockchain, ou outras aplicações que demandem alta confiabilidade e compactação segura de dados.&lt;/p&gt;
  2329. &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;div style=&quot;text-align:center;margin:15px 0;padding:10px;background-color:#f4f4f4;border-radius:8px;&quot;&gt;
  2330.   &lt;a href=&quot;https://www.youtube.com/@canalQb&quot; style=&quot;font-size:18px;font-weight:bold;text-decoration:none;color:#1a73e8;padding:8px 16px;border:2px solid #1a73e8;border-radius:5px;transition:all 0.3s ease;&quot;&gt;
  2331.      Clique aqui para visitar o CanalQb no YouTube
  2332.   &lt;/a&gt;
  2333. &lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://canalqb.blogspot.com/feeds/925555674565584662/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://canalqb.blogspot.com/2025/06/como-codificar-e-decodificar-base58-em.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/925555674565584662'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/925555674565584662'/><link rel='alternate' type='text/html' href='https://canalqb.blogspot.com/2025/06/como-codificar-e-decodificar-base58-em.html' title='Como Codificar e Decodificar Base58 em Python: Guia Completo'/><author><name>CanalQb</name><uri>http://www.blogger.com/profile/12641039126796028340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtt2Q0QwGuJ3OI0G29twmGKYmZvab5d8AV6fJd_HUdevW7fofyH2lDRAv39LAtg0A2x46Im5VwUT-1cfm0b4g7jgY9IKC_BbqqEV9bew_OhkddtGzaFlM4uL0LUeqS8nxK83Yufp3E6SOycslOyDA6O14vPpHRiPkTCSbb5H05NTE/s220/1QB.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s72-c/CanalQb.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5982274115355506187.post-2309560003020405899</id><published>2025-06-30T15:35:00.005-03:00</published><updated>2025-06-30T15:35:43.349-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Blockchain"/><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><title type='text'>Como Conectar ao Banco de Dados PostgreSQL com pg8000</title><content type='html'>&lt;!--Linha de separação superior--&gt;
  2334. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  2335.  
  2336. &lt;!--Link para o canal YouTube--&gt;
  2337. &lt;p style=&quot;text-align: center;&quot;&gt;
  2338.  &lt;a href=&quot;https://www.youtube.com/channel/UCdOA_1KzXHIp3gmVyyYv2sg&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot; title=&quot;Visite o @CanalQb no YouTube&quot;&gt;
  2339.    &lt;span style=&quot;font-size: 1.2em; font-weight: bold;&quot;&gt;@CanalQb no YouTube&lt;/span&gt;
  2340.  &lt;/a&gt;
  2341. &lt;/p&gt;
  2342.  
  2343. &lt;!--Linha de separação inferior--&gt;
  2344. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  2345.  
  2346. &lt;!--Imagem do canal--&gt;
  2347. &lt;div style=&quot;margin: 20px 0px; text-align: center;&quot;&gt;
  2348.  &lt;img alt=&quot;@CanalQb&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBAiRxJCZxVdxsqzF9dtSV9O_N3ekcsXxV2fU_vQGr6Kxw9_rx121B_KZlP47kgk9-F-jsc-3iNQxFadP7AnPiuftVOnqlXRTmi5j_JKjHIKWCxgQYNBbFSmf6_OlPBhrEzq8-HdVdYgqYJ8z4JIceFENbz2-e-JBaB4EQdnPZLp_vN5AHSXCaD5W1xvdL/s1280/Nova%20Capa%202024.gif&quot; style=&quot;border-radius: 10px; height: auto; max-width: 100%;&quot; /&gt;
  2349. &lt;/div&gt;
  2350.  
  2351. &lt;h2 style=&quot;text-align: center;&quot;&gt;Como Conectar ao Banco de Dados PostgreSQL com pg8000&lt;/h2&gt;
  2352.  
  2353. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  2354.  
  2355. &lt;!--Vídeo incorporado--&gt;
  2356. &lt;div style=&quot;margin-bottom: 30px; text-align: center;&quot;&gt;
  2357.  &lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; height=&quot;450&quot; loading=&quot;lazy&quot; src=&quot;https://www.youtube.com/embed/g1dFzkx_SJA?autoplay=1&amp;amp;mute=1&amp;amp;origin=https://canalqb.blogspot.com/&amp;amp;controls=1&amp;amp;rel=0&amp;amp;enablejsapi=1&amp;amp;cc_load_policy=1&quot; title=&quot;Vídeo do @CanalQb&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;
  2358. &lt;/div&gt;
  2359. &lt;p style=&quot;color: red; font-weight: bold;&quot;&gt;
  2360. Sempre crie uma frase de segurança única para jogos, testnets ou airdrops e evite usar sua carteira principal.
  2361. &lt;/p&gt;
  2362. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 80%;&quot; /&gt;
  2363. &lt;br /&gt;
  2364. &lt;h2&gt;Conectando ao Banco de Dados PostgreSQL Usando pg8000 em Python&lt;/h2&gt;
  2365.  
  2366. &lt;p&gt;Se você precisa se conectar a um banco de dados PostgreSQL utilizando Python, uma das opções mais seguras e modernas é a biblioteca &lt;strong&gt;&lt;a href=&quot;https://pypi.org/project/pg8000/&quot; title=&quot;pg8000 no PyPI&quot; target=&quot;_blank&quot;&gt;pg8000&lt;/a&gt;&lt;/strong&gt;. Ela é 100% escrita em Python puro, o que significa que não requer extensões em C ou dependências externas complexas.&lt;/p&gt;
  2367.  
  2368. &lt;p&gt;Neste artigo, você verá como realizar uma conexão segura com um banco PostgreSQL hospedado na &lt;strong&gt;&lt;a href=&quot;https://neon.tech&quot; title=&quot;Neon PostgreSQL Cloud&quot; target=&quot;_blank&quot;&gt;Neon&lt;/a&gt;&lt;/strong&gt;, uma plataforma moderna e escalável de bancos de dados em nuvem.&lt;/p&gt;
  2369.  
  2370. &lt;h3&gt;📦 Requisitos&lt;/h3&gt;
  2371. &lt;ul&gt;
  2372.  &lt;li&gt;Python 3.7 ou superior instalado&lt;/li&gt;
  2373.  &lt;li&gt;Biblioteca &lt;code&gt;pg8000&lt;/code&gt; instalada (você pode instalar com &lt;code&gt;pip install pg8000&lt;/code&gt;)&lt;/li&gt;
  2374.  &lt;li&gt;URL de conexão do seu banco PostgreSQL&lt;/li&gt;
  2375. &lt;/ul&gt;
  2376.  
  2377. &lt;h3&gt;🔐 Sobre o PostgreSQL na Neon&lt;/h3&gt;
  2378. &lt;p&gt;A Neon é uma plataforma cloud-native de banco de dados PostgreSQL que oferece suporte completo a SSL e compatibilidade com drivers Python. Para garantir a segurança, todas as conexões exigem criptografia TLS/SSL.&lt;/p&gt;
  2379.  
  2380. &lt;h3&gt;🔧 Exemplo de Script de Conexão com pg8000&lt;/h3&gt;
  2381.  
  2382. &lt;pre&gt;&lt;code&gt;import pg8000
  2383. import urllib.parse
  2384.  
  2385. # URL da conexão com o banco Neon (exemplo)
  2386. DATABASE_URL = &quot;postgres://neondb_owner:aaaaaaa.us-east-1.aws.neon.tech/neondb?sslmode=require&quot;
  2387.  
  2388. def conectar_ao_banco():
  2389.    try:
  2390.        print(&quot;Tentando conectar ao banco de dados...&quot;)
  2391.        url = urllib.parse.urlparse(DATABASE_URL)
  2392.        conn = pg8000.connect(
  2393.            user=url.username,
  2394.            password=url.password,
  2395.            host=url.hostname,
  2396.            database=url.path[1:],
  2397.            port=5432,
  2398.            ssl_context=True,
  2399.            timeout=30
  2400.        )
  2401.        print(&quot;Conexão bem-sucedida!&quot;)
  2402.        conn.close()  # Fecha a conexão após teste
  2403.    except Exception as e:
  2404.        print(f&quot;Erro ao conectar ao banco de dados: {e}&quot;)
  2405.        raise
  2406.  
  2407. if __name__ == &quot;__main__&quot;:
  2408.    conectar_ao_banco()
  2409. &lt;/code&gt;&lt;/pre&gt;
  2410.  
  2411. &lt;h3&gt;🧠 Detalhes Técnicos&lt;/h3&gt;
  2412. &lt;ul&gt;
  2413.  &lt;li&gt;&lt;strong&gt;&lt;code&gt;urlparse&lt;/code&gt;:&lt;/strong&gt; extrai as partes do URL de conexão (usuário, senha, host e nome do banco).&lt;/li&gt;
  2414.  &lt;li&gt;&lt;strong&gt;&lt;code&gt;pg8000.connect&lt;/code&gt;:&lt;/strong&gt; faz a conexão com o PostgreSQL utilizando SSL ativado.&lt;/li&gt;
  2415.  &lt;li&gt;&lt;strong&gt;&lt;code&gt;ssl_context=True&lt;/code&gt;:&lt;/strong&gt; habilita a camada de segurança necessária para comunicação com a Neon.&lt;/li&gt;
  2416. &lt;/ul&gt;
  2417.  
  2418. &lt;h3&gt;🧪 Dica de Teste Rápido&lt;/h3&gt;
  2419. &lt;p&gt;Você pode executar esse script diretamente via terminal ou editor de código. Certifique-se de atualizar a variável &lt;code&gt;DATABASE_URL&lt;/code&gt; com suas credenciais reais antes do teste.&lt;/p&gt;
  2420.  
  2421. &lt;h3&gt;⚠️ Segurança e Boas Práticas&lt;/h3&gt;
  2422. &lt;ul&gt;
  2423.  &lt;li&gt;Evite deixar sua &lt;strong&gt;URL de conexão exposta&lt;/strong&gt; em repositórios públicos.&lt;/li&gt;
  2424.  &lt;li&gt;Use variáveis de ambiente para armazenar senhas e dados sensíveis sempre que possível.&lt;/li&gt;
  2425.  &lt;li&gt;Garanta que o seu banco esteja com autenticação e conexões seguras ativadas (SSL).&lt;/li&gt;
  2426. &lt;/ul&gt;
  2427.  
  2428. &lt;h3&gt;🔗 Referências Oficiais&lt;/h3&gt;
  2429. &lt;ul&gt;
  2430.  &lt;li&gt;&lt;a href=&quot;https://pypi.org/project/pg8000/&quot; title=&quot;pg8000 no PyPI&quot; target=&quot;_blank&quot;&gt;pg8000 - Python PostgreSQL Driver (PyPI)&lt;/a&gt;&lt;/li&gt;
  2431.  &lt;li&gt;&lt;a href=&quot;https://docs.neon.tech&quot; title=&quot;Documentação oficial do Neon&quot; target=&quot;_blank&quot;&gt;Documentação oficial da Neon&lt;/a&gt;&lt;/li&gt;
  2432.  &lt;li&gt;&lt;a href=&quot;https://www.postgresql.org/docs/&quot; title=&quot;Documentação PostgreSQL&quot; target=&quot;_blank&quot;&gt;Documentação do PostgreSQL&lt;/a&gt;&lt;/li&gt;
  2433. &lt;/ul&gt;
  2434. &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;div style=&quot;text-align:center;margin:15px 0;padding:10px;background-color:#f4f4f4;border-radius:8px;&quot;&gt;
  2435.   &lt;a href=&quot;https://www.youtube.com/@canalQb&quot; style=&quot;font-size:18px;font-weight:bold;text-decoration:none;color:#1a73e8;padding:8px 16px;border:2px solid #1a73e8;border-radius:5px;transition:all 0.3s ease;&quot;&gt;
  2436.      Clique aqui para visitar o CanalQb no YouTube
  2437.   &lt;/a&gt;
  2438. &lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://canalqb.blogspot.com/feeds/2309560003020405899/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://canalqb.blogspot.com/2025/06/como-conectar-ao-banco-de-dados.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/2309560003020405899'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/2309560003020405899'/><link rel='alternate' type='text/html' href='https://canalqb.blogspot.com/2025/06/como-conectar-ao-banco-de-dados.html' title='Como Conectar ao Banco de Dados PostgreSQL com pg8000'/><author><name>CanalQb</name><uri>http://www.blogger.com/profile/12641039126796028340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtt2Q0QwGuJ3OI0G29twmGKYmZvab5d8AV6fJd_HUdevW7fofyH2lDRAv39LAtg0A2x46Im5VwUT-1cfm0b4g7jgY9IKC_BbqqEV9bew_OhkddtGzaFlM4uL0LUeqS8nxK83Yufp3E6SOycslOyDA6O14vPpHRiPkTCSbb5H05NTE/s220/1QB.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBAiRxJCZxVdxsqzF9dtSV9O_N3ekcsXxV2fU_vQGr6Kxw9_rx121B_KZlP47kgk9-F-jsc-3iNQxFadP7AnPiuftVOnqlXRTmi5j_JKjHIKWCxgQYNBbFSmf6_OlPBhrEzq8-HdVdYgqYJ8z4JIceFENbz2-e-JBaB4EQdnPZLp_vN5AHSXCaD5W1xvdL/s72-c/Nova%20Capa%202024.gif" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5982274115355506187.post-9085719111018987602</id><published>2025-06-30T15:33:00.003-03:00</published><updated>2025-07-31T12:54:38.064-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Blockchain"/><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><title type='text'>Gerador de Chaves Bitcoin com Verificação de Endereço</title><content type='html'>&lt;!--Linha de separação superior--&gt;
  2439. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  2440.  
  2441. &lt;!--Link para o canal YouTube--&gt;
  2442. &lt;p style=&quot;text-align: center;&quot;&gt;
  2443.  &lt;a href=&quot;https://www.youtube.com/channel/UCdOA_1KzXHIp3gmVyyYv2sg&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot; title=&quot;Visite o @CanalQb no YouTube&quot;&gt;
  2444.    &lt;span style=&quot;font-size: 1.2em; font-weight: bold;&quot;&gt;@CanalQb no YouTube&lt;/span&gt;
  2445.  &lt;/a&gt;
  2446. &lt;/p&gt;
  2447.  
  2448. &lt;!--Linha de separação inferior--&gt;
  2449. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  2450.  
  2451. &lt;!--Imagem do canal--&gt;
  2452. &lt;div style=&quot;margin: 20px 0px; text-align: center;&quot;&gt;
  2453.  &lt;img alt=&quot;@CanalQb&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s2560/CanalQb.png&quot; style=&quot;border-radius: 10px; height: auto; max-width: 100%;&quot; /&gt;
  2454. &lt;/div&gt;
  2455.  
  2456. &lt;h2 style=&quot;text-align: center;&quot;&gt;Gerador de Chaves Bitcoin com Verificação de Endereço&lt;/h2&gt;
  2457.  
  2458. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  2459.  
  2460. &lt;!--Vídeo incorporado--&gt;
  2461. &lt;div style=&quot;margin-bottom: 30px; text-align: center;&quot;&gt;
  2462.  &lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; height=&quot;450&quot; loading=&quot;lazy&quot; src=&quot;https://www.youtube.com/embed/g1dFzkx_SJA?autoplay=1&amp;amp;mute=1&amp;amp;origin=https://canalqb.blogspot.com/&amp;amp;controls=1&amp;amp;rel=0&amp;amp;enablejsapi=1&amp;amp;cc_load_policy=1&quot; title=&quot;Vídeo do @CanalQb&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;
  2463. &lt;/div&gt;
  2464. &lt;p style=&quot;color: red; font-weight: bold;&quot;&gt;
  2465. Sempre crie uma frase de segurança única para jogos, testnets ou airdrops e evite usar sua carteira principal.
  2466. &lt;/p&gt;
  2467. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 80%;&quot; /&gt;
  2468. &lt;br /&gt;
  2469. &lt;h2&gt;Gerador de Chaves Privadas Bitcoin com Validação de Endereço&lt;/h2&gt;
  2470.  
  2471. &lt;p&gt;Este projeto em Python é um gerador de chaves privadas para Bitcoin que trabalha com intervalos binários e busca um endereço-alvo específico. Ele oferece suporte à verificação de padrões binários, salvamento de progresso e geração de WIFs e endereços Bitcoin válidos utilizando a biblioteca &lt;code&gt;bit&lt;/code&gt;.&lt;/p&gt;
  2472.  
  2473. &lt;h3&gt;⚙️ Funcionalidades do Script&lt;/h3&gt;
  2474. &lt;ul&gt;
  2475.  &lt;li&gt;Geração aleatória de chaves privadas dentro de intervalos personalizados.&lt;/li&gt;
  2476.  &lt;li&gt;Conversão de chaves para formato &lt;strong&gt;WIF&lt;/strong&gt; e derivação de endereços Bitcoin.&lt;/li&gt;
  2477.  &lt;li&gt;Verificação automática contra um endereço-alvo informado.&lt;/li&gt;
  2478.  &lt;li&gt;Salvamento de progresso para retomada posterior.&lt;/li&gt;
  2479.  &lt;li&gt;Forçamento de padrões binários opcionais como “10001”.&lt;/li&gt;
  2480. &lt;/ul&gt;
  2481.  
  2482. &lt;h3&gt;🔐 Sobre a Curva Elíptica SECP256k1&lt;/h3&gt;
  2483. &lt;p&gt;O Bitcoin utiliza a curva elíptica &lt;strong&gt;secp256k1&lt;/strong&gt; para derivar endereços públicos a partir de chaves privadas. A ordem do grupo dessa curva é:&lt;/p&gt;
  2484. &lt;pre&gt;&lt;code&gt;115792089237316195423570985008687907852837564279074904382605163141518161494337&lt;/code&gt;&lt;/pre&gt;
  2485.  
  2486. &lt;p&gt;Este valor define os limites válidos para uma chave privada. O script garante que os valores gerados estejam dentro desse limite.&lt;/p&gt;
  2487.  
  2488. &lt;h3&gt;📂 Explicação dos Principais Componentes&lt;/h3&gt;
  2489.  
  2490. &lt;h4&gt;1. Salvamento de Progresso&lt;/h4&gt;
  2491. &lt;p&gt;Permite que você continue a varredura de onde parou, salvando o índice em hexadecimal no arquivo &lt;code&gt;progresso.txt&lt;/code&gt;.&lt;/p&gt;
  2492.  
  2493. &lt;h4&gt;2. Geração de Chave com Padrão&lt;/h4&gt;
  2494. &lt;p&gt;É possível forçar a inclusão do padrão binário &lt;code&gt;10001&lt;/code&gt; dentro da chave privada. Isso pode ser útil em testes ou experimentações com algoritmos otimizados.&lt;/p&gt;
  2495.  
  2496. &lt;h4&gt;3. Conversão e Verificação&lt;/h4&gt;
  2497. &lt;p&gt;O script usa a biblioteca &lt;code&gt;bit&lt;/code&gt; para gerar WIFs e endereços Bitcoin a partir da chave privada gerada. Caso o endereço corresponda ao endereço-alvo, os dados são salvos automaticamente no arquivo &lt;code&gt;chave_encontrada.txt&lt;/code&gt;.&lt;/p&gt;
  2498.  
  2499. &lt;h3&gt;🧠 Observações Importantes&lt;/h3&gt;
  2500. &lt;p&gt;&lt;strong&gt;Atenção:&lt;/strong&gt; O processo de encontrar uma chave que corresponda a um endereço Bitcoin específico por tentativa e erro é computacionalmente inviável e é classificado como &lt;strong&gt;ataque de chave privada&lt;/strong&gt;, o que não é recomendado fora de contextos educacionais ou experimentais.&lt;/p&gt;
  2501.  
  2502. &lt;p&gt;&lt;strong&gt;Este conteúdo é meramente educacional&lt;/strong&gt; e visa demonstrar como funcionam algoritmos de geração de chaves na blockchain. Jamais utilize esse tipo de ferramenta para tentar acessar carteiras que não são suas. E lembre-se: investir ou explorar sistemas que você não compreende plenamente pode resultar em perdas. Faça sempre uma autoanálise antes de qualquer ação.&lt;/p&gt;
  2503.  
  2504. &lt;h3&gt;🧪 Exemplo de Execução&lt;/h3&gt;
  2505. &lt;pre&gt;&lt;code&gt;
  2506. target_address = &#39;19vkiEajfhuZ8bs8Zu2jgmC6oqZbWqhxhG&#39;
  2507. inicio_bin = &#39;1000000000000000000000000000000000000000000000000000000000000000&#39;
  2508. fim_bin = &#39;1111111111111111111111111111111111111111111111111111111111111111&#39;
  2509. gerar_wif_e_enderecos_unicos(inicio_bin, fim_bin, target_address)
  2510. &lt;/code&gt;&lt;/pre&gt;
  2511.  
  2512. &lt;h3&gt;🧬 Código Completo do Projeto&lt;/h3&gt;
  2513. &lt;pre&gt;&lt;code&gt;import secrets
  2514. from bit import Key
  2515.  
  2516. GROUP_ORDER = 115792089237316195423570985008687907852837564279074904382605163141518161494337
  2517.  
  2518. def salvar_progresso(indice_atual):
  2519.    with open(&quot;progresso.txt&quot;, &quot;w&quot;) as f:
  2520.        f.write(hex(indice_atual))
  2521.  
  2522. def carregar_progresso():
  2523.    try:
  2524.        with open(&quot;progresso.txt&quot;, &quot;r&quot;) as f:
  2525.            progresso_hex = f.read().strip()
  2526.            return int(progresso_hex, 16) if progresso_hex else 0
  2527.    except FileNotFoundError:
  2528.        return 0
  2529.  
  2530. def gerar_chave_unica(inicio, fim, forcar_padrao=False):
  2531.    while True:
  2532.        chave_aleatoria = secrets.randbelow(fim - inicio + 1) + inicio
  2533.        if forcar_padrao:
  2534.            binario = format(chave_aleatoria, &#39;064b&#39;)
  2535.            if &#39;10001&#39; in binario:
  2536.                return chave_aleatoria
  2537.        return chave_aleatoria
  2538.  
  2539. def gerar_wif_e_endereco(chave_privada):
  2540.    chave = Key.from_int(chave_privada)
  2541.    return chave.to_wif(), chave.address
  2542.  
  2543. def salvar_wif_em_arquivo(chave_wif, endereco):
  2544.    with open(&quot;chave_encontrada.txt&quot;, &quot;w&quot;) as f:
  2545.        f.write(f&quot;WIF: {chave_wif}\nEndereço: {endereco}\n&quot;)
  2546.    print(&quot;Chave WIF e Endereço salvos em &#39;chave_encontrada.txt&#39;.&quot;)
  2547.  
  2548. def gerar_wif_e_enderecos_unicos(inicio_bin, fim_bin, target_address):
  2549.    inicio = int(inicio_bin, 2)
  2550.    fim = int(fim_bin, 2)
  2551.    
  2552.    if inicio &lt; 0 or fim &gt;= GROUP_ORDER:
  2553.        print(f&quot;Intervalo inválido! Deve estar entre 0 e {GROUP_ORDER-1}.&quot;)
  2554.        return None, None
  2555.  
  2556.    inicio_atual = carregar_progresso()
  2557.    total_iteracoes = fim - inicio + 1
  2558.  
  2559.    for i in range(inicio_atual, fim + 1):
  2560.        if i % 100 == 0:
  2561.            chave_privada = gerar_chave_unica(inicio, fim, forcar_padrao=True)
  2562.        else:
  2563.            chave_privada = gerar_chave_unica(inicio, fim)
  2564.  
  2565.        chave_wif, endereco = gerar_wif_e_endereco(chave_privada)
  2566.        binario_64 = format(chave_privada, &#39;064b&#39;)
  2567.        print(f&quot;Procurando... Binário: {binario_64} | WIF: {chave_wif} | Endereço: {endereco}&quot;, end=&quot;\r&quot;)
  2568.  
  2569.        if endereco == target_address:
  2570.            print(f&quot;\nEndereço encontrado! Binário: {binario_64} | WIF: {chave_wif} - Endereço: {endereco}&quot;)
  2571.            salvar_wif_em_arquivo(chave_wif, endereco)
  2572.            return chave_wif, endereco
  2573.  
  2574.        salvar_progresso(i)
  2575.  
  2576.        if i % (total_iteracoes // 10) == 0:
  2577.            print(f&quot;Limpeza de memória aos {i} passos...&quot;)
  2578.  
  2579.    print(&quot;\nEndereço não encontrado no intervalo especificado.&quot;)
  2580.    return None, None
  2581. &lt;/code&gt;&lt;/pre&gt;
  2582.  
  2583. &lt;h3&gt;🔗 Links Úteis&lt;/h3&gt;
  2584. &lt;ul&gt;
  2585.  &lt;li&gt;&lt;a href=&quot;https://ofek.dev/bit/&quot; title=&quot;Site oficial da biblioteca bit&quot; target=&quot;_blank&quot;&gt;bit - Biblioteca Bitcoin para Python&lt;/a&gt;&lt;/li&gt;
  2586.  &lt;li&gt;&lt;a href=&quot;https://developer.bitcoin.org/reference&quot; title=&quot;Referência oficial do Bitcoin&quot; target=&quot;_blank&quot;&gt;Documentação do Bitcoin Developer&lt;/a&gt;&lt;/li&gt;
  2587.  &lt;li&gt;&lt;a href=&quot;https://en.bitcoin.it/wiki/Wallet_import_format&quot; title=&quot;WIF no Bitcoin Wiki&quot; target=&quot;_blank&quot;&gt;Entenda o formato WIF&lt;/a&gt;&lt;/li&gt;
  2588. &lt;/ul&gt;
  2589. &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;div style=&quot;text-align:center;margin:15px 0;padding:10px;background-color:#f4f4f4;border-radius:8px;&quot;&gt;
  2590.   &lt;a href=&quot;https://www.youtube.com/@canalQb&quot; style=&quot;font-size:18px;font-weight:bold;text-decoration:none;color:#1a73e8;padding:8px 16px;border:2px solid #1a73e8;border-radius:5px;transition:all 0.3s ease;&quot;&gt;
  2591.      Clique aqui para visitar o CanalQb no YouTube
  2592.   &lt;/a&gt;
  2593. &lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://canalqb.blogspot.com/feeds/9085719111018987602/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://canalqb.blogspot.com/2025/06/gerador-de-chaves-bitcoin-com.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/9085719111018987602'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/9085719111018987602'/><link rel='alternate' type='text/html' href='https://canalqb.blogspot.com/2025/06/gerador-de-chaves-bitcoin-com.html' title='Gerador de Chaves Bitcoin com Verificação de Endereço'/><author><name>CanalQb</name><uri>http://www.blogger.com/profile/12641039126796028340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtt2Q0QwGuJ3OI0G29twmGKYmZvab5d8AV6fJd_HUdevW7fofyH2lDRAv39LAtg0A2x46Im5VwUT-1cfm0b4g7jgY9IKC_BbqqEV9bew_OhkddtGzaFlM4uL0LUeqS8nxK83Yufp3E6SOycslOyDA6O14vPpHRiPkTCSbb5H05NTE/s220/1QB.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s72-c/CanalQb.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5982274115355506187.post-6712541438306803741</id><published>2025-06-30T15:31:00.002-03:00</published><updated>2025-07-31T12:54:33.695-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Blockchain"/><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><title type='text'>Sistema Snapshot Blockchain Bitcoin com Python</title><content type='html'>&lt;!--Linha de separação superior--&gt;
  2594. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  2595.  
  2596. &lt;!--Link para o canal YouTube--&gt;
  2597. &lt;p style=&quot;text-align: center;&quot;&gt;
  2598.  &lt;a href=&quot;https://www.youtube.com/channel/UCdOA_1KzXHIp3gmVyyYv2sg&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot; title=&quot;Visite o @CanalQb no YouTube&quot;&gt;
  2599.    &lt;span style=&quot;font-size: 1.2em; font-weight: bold;&quot;&gt;@CanalQb no YouTube&lt;/span&gt;
  2600.  &lt;/a&gt;
  2601. &lt;/p&gt;
  2602.  
  2603. &lt;!--Linha de separação inferior--&gt;
  2604. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  2605.  
  2606. &lt;!--Imagem do canal--&gt;
  2607. &lt;div style=&quot;margin: 20px 0px; text-align: center;&quot;&gt;
  2608.  &lt;img alt=&quot;@CanalQb&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s2560/CanalQb.png&quot; style=&quot;border-radius: 10px; height: auto; max-width: 100%;&quot; /&gt;
  2609. &lt;/div&gt;
  2610.  
  2611. &lt;h2 style=&quot;text-align: center;&quot;&gt;Como Usar a Testnet Chainphon e se Preparar para o Lançamento Oficial&lt;/h2&gt;
  2612.  
  2613. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  2614.  
  2615. &lt;!--Vídeo incorporado--&gt;
  2616. &lt;div style=&quot;margin-bottom: 30px; text-align: center;&quot;&gt;
  2617.  &lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; height=&quot;450&quot; loading=&quot;lazy&quot; src=&quot;https://www.youtube.com/embed/g1dFzkx_SJA?autoplay=1&amp;amp;mute=1&amp;amp;origin=https://canalqb.blogspot.com/&amp;amp;controls=1&amp;amp;rel=0&amp;amp;enablejsapi=1&amp;amp;cc_load_policy=1&quot; title=&quot;Vídeo do @CanalQb&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;
  2618. &lt;/div&gt;
  2619. &lt;p style=&quot;color: red; font-weight: bold;&quot;&gt;
  2620. Sempre crie uma frase de segurança única para jogos, testnets ou airdrops e evite usar sua carteira principal.
  2621. &lt;/p&gt;
  2622. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 80%;&quot; /&gt;
  2623. &lt;br /&gt;
  2624. &lt;h2&gt;Como Criar um Sistema Snapshot Blockchain Bitcoin com Python&lt;/h2&gt;
  2625.  
  2626. &lt;p&gt;Neste tutorial prático, você aprenderá como construir um sistema completo em Python para capturar um snapshot da blockchain do Bitcoin contendo os saldos de todos os endereços. O processo envolve o download de um arquivo .tsv.gz com milhões de registros, sua extração, e a importação dos dados para um banco de dados SQLite local.&lt;/p&gt;
  2627.  
  2628. &lt;p&gt;Este tipo de ferramenta é útil para desenvolvedores que desejam realizar análises estatísticas, auditorias de endereços ou integrar sistemas com informações históricas da blockchain.&lt;/p&gt;
  2629.  
  2630. &lt;h3&gt;Pré-requisitos&lt;/h3&gt;
  2631. &lt;ul&gt;
  2632.  &lt;li&gt;Python 3.7 ou superior&lt;/li&gt;
  2633.  &lt;li&gt;Bibliotecas: &lt;code&gt;requests&lt;/code&gt;, &lt;code&gt;tqdm&lt;/code&gt;, &lt;code&gt;pandas&lt;/code&gt;, &lt;code&gt;sqlite3&lt;/code&gt;, &lt;code&gt;gzip&lt;/code&gt;, &lt;code&gt;gc&lt;/code&gt;, &lt;code&gt;datetime&lt;/code&gt;&lt;/li&gt;
  2634.  &lt;li&gt;Espaço em disco (o arquivo .tsv descompactado pode ter vários GB)&lt;/li&gt;
  2635. &lt;/ul&gt;
  2636.  
  2637. &lt;h3&gt;1. Download do Arquivo de Endereços Bitcoin&lt;/h3&gt;
  2638.  
  2639. &lt;p&gt;O script inicia baixando um arquivo GZ contendo dados atualizados de endereços e saldos. O arquivo é hospedado no projeto &lt;a href=&quot;http://addresses.loyce.club/&quot; title=&quot;Endereços Bitcoin por Loyce&quot; target=&quot;_blank&quot;&gt;Loyce.club&lt;/a&gt;.&lt;/p&gt;
  2640.  
  2641. &lt;p&gt;Exemplo de URL utilizada:&lt;/p&gt;
  2642. &lt;pre&gt;&lt;code&gt;http://addresses.loyce.club/blockchair_bitcoin_addresses_and_balance_LATEST.tsv.gz&lt;/code&gt;&lt;/pre&gt;
  2643.  
  2644. &lt;h3&gt;2. Extração do Arquivo GZ&lt;/h3&gt;
  2645. &lt;p&gt;O arquivo GZ é descompactado utilizando a biblioteca &lt;code&gt;gzip&lt;/code&gt;. A extração é feita com controle de progresso utilizando a biblioteca &lt;code&gt;tqdm&lt;/code&gt;, oferecendo uma experiência visual mais amigável ao usuário.&lt;/p&gt;
  2646.  
  2647. &lt;h3&gt;3. Importação para SQLite com Pandas&lt;/h3&gt;
  2648. &lt;p&gt;Após a extração, o script importa os dados para um banco de dados SQLite local, chamado &lt;code&gt;relatorio_btc.db&lt;/code&gt;. Utilizamos leitura em chunks com &lt;code&gt;pandas.read_csv()&lt;/code&gt; para evitar estouro de memória.&lt;/p&gt;
  2649.  
  2650. &lt;p&gt;O banco de dados criado contém uma única tabela:&lt;/p&gt;
  2651. &lt;pre&gt;&lt;code&gt;CREATE TABLE IF NOT EXISTS relatorio_btc (
  2652.    address TEXT PRIMARY KEY,
  2653.    balance REAL
  2654. )&lt;/code&gt;&lt;/pre&gt;
  2655.  
  2656. &lt;h3&gt;4. Progresso em Tempo Real&lt;/h3&gt;
  2657. &lt;p&gt;Durante a execução, o sistema mostra o progresso da importação em tempo real e realiza o commit em blocos. O sistema também trata interrupções com &lt;code&gt;KeyboardInterrupt&lt;/code&gt; e erros durante a transação com rollback.&lt;/p&gt;
  2658.  
  2659. &lt;h3&gt;5. Código Completo do Script&lt;/h3&gt;
  2660.  
  2661. &lt;pre&gt;&lt;code&gt;import requests
  2662. from tqdm import tqdm
  2663. from datetime import datetime
  2664. import gzip
  2665. import os
  2666. import sqlite3
  2667. import pandas as pd
  2668. import gc
  2669. import ctypes
  2670. from time import time
  2671.  
  2672. try:
  2673.    ctypes.windll.kernel32.SetConsoleTitleW(&quot;Sistema SNAPSHOT Blockchain Bitcoin - V 1.0&quot;)
  2674. except:
  2675.    pass
  2676.  
  2677. def baixar_arquivo(url, destino):
  2678.    response = requests.get(url, stream=True)
  2679.    total_size = int(response.headers.get(&#39;content-length&#39;, 0))
  2680.    with open(destino, &#39;wb&#39;) as file, tqdm(
  2681.        desc=destino, total=total_size, unit=&#39;B&#39;, unit_scale=True
  2682.    ) as bar:
  2683.        for data in response.iter_content(chunk_size=1024):
  2684.            file.write(data)
  2685.            bar.update(len(data))
  2686.  
  2687. def extrair_arquivo(gz_path, tsv_path):
  2688.    with gzip.open(gz_path, &#39;rb&#39;) as f_in:
  2689.        total_size = os.path.getsize(gz_path)
  2690.        with open(tsv_path, &#39;wb&#39;) as f_out, tqdm(
  2691.            total=total_size, desc=&quot;Extraindo&quot;, unit=&#39;B&#39;, unit_scale=True
  2692.        ) as bar:
  2693.            buffer_size = 1024 * 1024
  2694.            while True:
  2695.                buf = f_in.read(buffer_size)
  2696.                if not buf:
  2697.                    break
  2698.                f_out.write(buf)
  2699.                bar.update(len(buf))
  2700.  
  2701. def importar_para_sqlite(tsv_path, db_path):
  2702.    conn = sqlite3.connect(db_path)
  2703.    cursor = conn.cursor()
  2704.    cursor.execute(&#39;&#39;&#39;
  2705.        CREATE TABLE IF NOT EXISTS relatorio_btc (
  2706.            address TEXT PRIMARY KEY,
  2707.            balance REAL
  2708.        )
  2709.    &#39;&#39;&#39;)
  2710.    cursor.execute(&#39;&#39;&#39;
  2711.        CREATE INDEX IF NOT EXISTS idx_address ON relatorio_btc(address)
  2712.    &#39;&#39;&#39;)
  2713.  
  2714.    chunk_size = 100_000
  2715.    df_iterator = pd.read_csv(tsv_path, sep=&#39;\t&#39;, chunksize=chunk_size)
  2716.  
  2717.    with open(tsv_path) as f:
  2718.        total_lines = sum(1 for _ in f)
  2719.  
  2720.    processed_lines = 0
  2721.    print(f&quot;\nIniciando a importação dos dados...\nTotal de linhas: {total_lines}&quot;)
  2722.  
  2723.    try:
  2724.        conn.isolation_level = None
  2725.        cursor.execute(&#39;BEGIN TRANSACTION;&#39;)
  2726.  
  2727.        for df in df_iterator:
  2728.            if &#39;address&#39; not in df.columns or &#39;balance&#39; not in df.columns:
  2729.                print(&quot;\n❌ O arquivo não contém as colunas &#39;address&#39; e &#39;balance&#39;.&quot;)
  2730.                conn.close()
  2731.                return
  2732.  
  2733.            cursor.executemany(&#39;&#39;&#39;
  2734.                INSERT OR IGNORE INTO relatorio_btc (address, balance)
  2735.                VALUES (?, ?)
  2736.            &#39;&#39;&#39;, [(row[&#39;address&#39;], row[&#39;balance&#39;]) for _, row in df.iterrows()])
  2737.  
  2738.            conn.commit()
  2739.            processed_lines += len(df)
  2740.            progresso = (processed_lines / total_lines) * 100
  2741.            print(f&quot;\r{progresso:.2f}% já importado.&quot;, end=&#39;&#39;, flush=True)
  2742.  
  2743.            del df
  2744.            gc.collect()
  2745.  
  2746.        print(&quot;\n✅ Importação concluída com sucesso.&quot;)
  2747.  
  2748.    except KeyboardInterrupt:
  2749.        print(&quot;\n⏹ Interrompido manualmente. Fazendo rollback...&quot;)
  2750.        conn.rollback()
  2751.    except Exception as e:
  2752.        print(f&quot;\n❌ Erro durante a importação: {e}&quot;)
  2753.        conn.rollback()
  2754.    finally:
  2755.        conn.close()
  2756.        print(&quot;🔒 Conexão com o banco encerrada.&quot;)
  2757.  
  2758. if __name__ == &quot;__main__&quot;:
  2759.    try:
  2760.        start_time = time()
  2761.  
  2762.        url = &quot;http://addresses.loyce.club/blockchair_bitcoin_addresses_and_balance_LATEST.tsv.gz&quot;
  2763.        datadehoje = datetime.today().strftime(&#39;%d%m%Y&#39;)
  2764.        filename_gz = f&quot;blockchair_bitcoin_addresses_and_balance_{datadehoje}.tsv.gz&quot;
  2765.        filename_tsv = f&quot;blockchair_bitcoin_addresses_and_balance_{datadehoje}.tsv&quot;
  2766.        db_path = &quot;relatorio_btc.db&quot;
  2767.  
  2768.        print(&quot;🔽 Iniciando download do arquivo...&quot;)
  2769.        baixar_arquivo(url, filename_gz)
  2770.  
  2771.        print(&quot;📂 Extraindo arquivo .tsv...&quot;)
  2772.        extrair_arquivo(filename_gz, filename_tsv)
  2773.  
  2774.        if os.path.exists(filename_gz):
  2775.            os.remove(filename_gz)
  2776.            print(f&quot;🗑️ Arquivo {filename_gz} excluído.&quot;)
  2777.  
  2778.        importar_para_sqlite(filename_tsv, db_path)
  2779.  
  2780.        print(f&quot;\n⏱️ Tempo total de execução: {round(time() - start_time, 2)} segundos.&quot;)
  2781.  
  2782.    except KeyboardInterrupt:
  2783.        print(&quot;\n⏹ Execução interrompida pelo usuário.&quot;)
  2784. &lt;/code&gt;&lt;/pre&gt;
  2785.  
  2786. &lt;h3&gt;Conclusão&lt;/h3&gt;
  2787. &lt;p&gt;Este sistema é ideal para entusiastas e desenvolvedores de blockchain que desejam explorar os dados de forma offline. Ele permite criar consultas SQL para encontrar endereços específicos, analisar grandes saldos e muito mais.&lt;/p&gt;
  2788.  
  2789. &lt;p&gt;&lt;strong&gt;Importante:&lt;/strong&gt; Este conteúdo tem caráter educacional. Antes de investir ou utilizar dados obtidos da blockchain, é essencial fazer uma análise crítica individual e compreender os riscos envolvidos.&lt;/p&gt;
  2790.  
  2791. &lt;h3&gt;Links Oficiais e Créditos&lt;/h3&gt;
  2792. &lt;ul&gt;
  2793.  &lt;li&gt;&lt;a href=&quot;http://addresses.loyce.club/&quot; target=&quot;_blank&quot; title=&quot;Fonte oficial dos arquivos Bitcoin TSV&quot;&gt;Loyce.club - Arquivos Bitcoin&lt;/a&gt;&lt;/li&gt;
  2794.  &lt;li&gt;&lt;a href=&quot;https://pandas.pydata.org/&quot; target=&quot;_blank&quot; title=&quot;Documentação oficial da biblioteca Pandas&quot;&gt;Pandas - Site Oficial&lt;/a&gt;&lt;/li&gt;
  2795.  &lt;li&gt;&lt;a href=&quot;https://www.sqlite.org/index.html&quot; target=&quot;_blank&quot; title=&quot;Banco de dados leve para Python e apps&quot;&gt;SQLite - Site Oficial&lt;/a&gt;&lt;/li&gt;
  2796. &lt;/ul&gt;
  2797. &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;div style=&quot;text-align:center;margin:15px 0;padding:10px;background-color:#f4f4f4;border-radius:8px;&quot;&gt;
  2798.   &lt;a href=&quot;https://www.youtube.com/@canalQb&quot; style=&quot;font-size:18px;font-weight:bold;text-decoration:none;color:#1a73e8;padding:8px 16px;border:2px solid #1a73e8;border-radius:5px;transition:all 0.3s ease;&quot;&gt;
  2799.      Clique aqui para visitar o CanalQb no YouTube
  2800.   &lt;/a&gt;
  2801. &lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://canalqb.blogspot.com/feeds/6712541438306803741/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://canalqb.blogspot.com/2025/06/sistema-snapshot-blockchain-bitcoin-com.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/6712541438306803741'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/6712541438306803741'/><link rel='alternate' type='text/html' href='https://canalqb.blogspot.com/2025/06/sistema-snapshot-blockchain-bitcoin-com.html' title='Sistema Snapshot Blockchain Bitcoin com Python'/><author><name>CanalQb</name><uri>http://www.blogger.com/profile/12641039126796028340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtt2Q0QwGuJ3OI0G29twmGKYmZvab5d8AV6fJd_HUdevW7fofyH2lDRAv39LAtg0A2x46Im5VwUT-1cfm0b4g7jgY9IKC_BbqqEV9bew_OhkddtGzaFlM4uL0LUeqS8nxK83Yufp3E6SOycslOyDA6O14vPpHRiPkTCSbb5H05NTE/s220/1QB.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s72-c/CanalQb.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5982274115355506187.post-6254685310512039350</id><published>2025-06-30T15:28:00.007-03:00</published><updated>2025-07-31T12:54:29.379-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="API"/><category scheme="http://www.blogger.com/atom/ns#" term="Blockchain"/><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><title type='text'>Como Consultar Saldo Bitcoin via API RapidAPI com Python</title><content type='html'>&lt;!--Linha de separação superior--&gt;
  2802. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  2803.  
  2804. &lt;!--Link para o canal YouTube--&gt;
  2805. &lt;p style=&quot;text-align: center;&quot;&gt;
  2806.  &lt;a href=&quot;https://www.youtube.com/channel/UCdOA_1KzXHIp3gmVyyYv2sg&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot; title=&quot;Visite o @CanalQb no YouTube&quot;&gt;
  2807.    &lt;span style=&quot;font-size: 1.2em; font-weight: bold;&quot;&gt;@CanalQb no YouTube&lt;/span&gt;
  2808.  &lt;/a&gt;
  2809. &lt;/p&gt;
  2810.  
  2811. &lt;!--Linha de separação inferior--&gt;
  2812. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  2813.  
  2814. &lt;!--Imagem do canal--&gt;
  2815. &lt;div style=&quot;margin: 20px 0px; text-align: center;&quot;&gt;
  2816.  &lt;img alt=&quot;@CanalQb&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s2560/CanalQb.png&quot; style=&quot;border-radius: 10px; height: auto; max-width: 100%;&quot; /&gt;
  2817. &lt;/div&gt;
  2818.  
  2819. &lt;h2 style=&quot;text-align: center;&quot;&gt;Como Consultar Saldo Bitcoin via API RapidAPI com Python&lt;/h2&gt;
  2820.  
  2821. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  2822.  
  2823. &lt;!--Vídeo incorporado--&gt;
  2824. &lt;div style=&quot;margin-bottom: 30px; text-align: center;&quot;&gt;
  2825.  &lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; height=&quot;450&quot; loading=&quot;lazy&quot; src=&quot;https://www.youtube.com/embed/g1dFzkx_SJA?autoplay=1&amp;amp;mute=1&amp;amp;origin=https://canalqb.blogspot.com/&amp;amp;controls=1&amp;amp;rel=0&amp;amp;enablejsapi=1&amp;amp;cc_load_policy=1&quot; title=&quot;Vídeo do @CanalQb&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;
  2826. &lt;/div&gt;
  2827. &lt;p style=&quot;color: red; font-weight: bold;&quot;&gt;
  2828. Sempre crie uma frase de segurança única para jogos, testnets ou airdrops e evite usar sua carteira principal.
  2829. &lt;/p&gt;
  2830. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 80%;&quot; /&gt;
  2831. &lt;br /&gt;
  2832. &lt;h2&gt;Como Consultar Saldo Bitcoin via API RapidAPI com Python&lt;/h2&gt;
  2833.  
  2834. &lt;p&gt;Consultar saldos de endereços Bitcoin de forma programática é uma tarefa essencial para desenvolvedores que trabalham com criptomoedas e aplicações financeiras. Neste artigo, apresentamos dois exemplos completos em Python que utilizam APIs da RapidAPI para recuperar o saldo em Bitcoin, de forma simples e eficiente.&lt;/p&gt;
  2835.  
  2836. &lt;h3&gt;Primeiro Exemplo: Consulta Simples com http.client&lt;/h3&gt;
  2837. &lt;p&gt;Este exemplo usa a biblioteca nativa &lt;code&gt;http.client&lt;/code&gt; para enviar uma requisição HTTPS POST à API &lt;em&gt;bips-getbalance&lt;/em&gt;. A consulta é feita para obter o saldo em dólar (USD).&lt;/p&gt;
  2838.  
  2839. &lt;pre&gt;&lt;code&gt;import http.client
  2840.  
  2841. conn = http.client.HTTPSConnection(&quot;bips-getbalance.p.rapidapi.com&quot;)
  2842.  
  2843. payload = &quot;currency=USD&quot;
  2844.  
  2845. headers = {
  2846.    &#39;x-rapidapi-key&#39;: &quot;xfDlr3bnEhZbvoy79oNbLCMykVoiO3EZ&quot;,
  2847.    &#39;x-rapidapi-host&#39;: &quot;bips-getbalance.p.rapidapi.com&quot;,
  2848.    &#39;Content-Type&#39;: &quot;application/x-www-form-urlencoded&quot;
  2849. }
  2850.  
  2851. conn.request(&quot;POST&quot;, &quot;/&quot;, payload, headers)
  2852.  
  2853. res = conn.getresponse()
  2854. data = res.read()
  2855.  
  2856. print(data.decode(&quot;utf-8&quot;))
  2857. &lt;/code&gt;&lt;/pre&gt;
  2858.  
  2859. &lt;p&gt;Este código estabelece conexão segura, envia os cabeçalhos necessários com a chave da API e recebe a resposta da API em formato JSON.&lt;/p&gt;
  2860.  
  2861. &lt;h3&gt;Segundo Exemplo: Consulta de Saldo por Endereços Bitcoin com Requests&lt;/h3&gt;
  2862. &lt;p&gt;A segunda abordagem utiliza a biblioteca &lt;code&gt;requests&lt;/code&gt;, muito popular e fácil de usar, para consultar o saldo de múltiplos endereços Bitcoin de forma simultânea.&lt;/p&gt;
  2863.  
  2864. &lt;pre&gt;&lt;code&gt;import requests
  2865.  
  2866. url = &quot;https://bitcoin-api.p.rapidapi.com/balancesByAddress&quot;
  2867.  
  2868. payload = {
  2869.    &quot;addresses&quot;: [
  2870.        &quot;16ftSEQ4ctQFDtVZiUBusQUjRrGhM3JYwe&quot;,
  2871.        &quot;34xp4vRoCGJym3xR7yCVPFHoCNxv4Twseo&quot;
  2872.    ]
  2873. }
  2874.  
  2875. headers = {
  2876.    &quot;content-type&quot;: &quot;application/json&quot;,
  2877.    &quot;X-RapidAPI-Key&quot;: &quot;xfDlr3bnEhZbvoy79oNbLCMykVoiO3EZ&quot;,
  2878.    &quot;X-RapidAPI-Host&quot;: &quot;bitcoin-api.p.rapidapi.com&quot;
  2879. }
  2880.  
  2881. response = requests.post(url, json=payload, headers=headers)
  2882.  
  2883. print(response.text)
  2884. &lt;/code&gt;&lt;/pre&gt;
  2885.  
  2886. &lt;p&gt;Este script envia um JSON contendo os endereços Bitcoin para a API &lt;em&gt;bitcoin-api&lt;/em&gt;, recebendo em retorno o saldo de cada endereço consultado. Essa abordagem facilita integrações em sistemas que precisam monitorar várias carteiras simultaneamente.&lt;/p&gt;
  2887.  
  2888. &lt;h3&gt;Como Obter a Chave da API RapidAPI&lt;/h3&gt;
  2889. &lt;p&gt;Para executar estes exemplos, é necessário possuir uma chave válida da RapidAPI:&lt;/p&gt;
  2890. &lt;ul&gt;
  2891.  &lt;li&gt;Acesse &lt;a href=&quot;https://rapidapi.com&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; title=&quot;Portal oficial RapidAPI&quot;&gt;https://rapidapi.com&lt;/a&gt;&lt;/li&gt;
  2892.  &lt;li&gt;Crie uma conta ou faça login&lt;/li&gt;
  2893.  &lt;li&gt;Procure pelas APIs &lt;em&gt;bips-getbalance&lt;/em&gt; ou &lt;em&gt;bitcoin-api&lt;/em&gt;&lt;/li&gt;
  2894.  &lt;li&gt;Assine o plano adequado e copie a sua chave de API (X-RapidAPI-Key)&lt;/li&gt;
  2895. &lt;/ul&gt;
  2896.  
  2897. &lt;h3&gt;Boas Práticas e Segurança&lt;/h3&gt;
  2898. &lt;p&gt;Nunca compartilhe sua chave de API publicamente. Utilize variáveis de ambiente para armazenar suas credenciais em projetos reais, evitando expor suas chaves em códigos-fonte públicos.&lt;/p&gt;
  2899.  
  2900. &lt;p&gt;Além disso, é recomendável implementar tratamento de erros e validação das respostas para garantir robustez nas aplicações.&lt;/p&gt;
  2901.  
  2902. &lt;h3&gt;Considerações Finais&lt;/h3&gt;
  2903. &lt;p&gt;Com estas técnicas, é possível integrar consultas de saldo Bitcoin diretamente em sistemas, aplicações financeiras ou dashboards personalizados. Através da API RapidAPI, você tem acesso a dados confiáveis e em tempo real.&lt;/p&gt;
  2904.  
  2905. &lt;p&gt;&lt;strong&gt;Aviso Importante:&lt;/strong&gt; O uso dessas APIs é sujeito a limites e custos conforme o plano contratado. Avalie individualmente o uso para evitar cobranças inesperadas.&lt;/p&gt;
  2906.  
  2907. &lt;h3&gt;Referências Oficiais&lt;/h3&gt;
  2908. &lt;ul&gt;
  2909.  &lt;li&gt;&lt;a href=&quot;https://rapidapi.com&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; title=&quot;Portal oficial RapidAPI&quot;&gt;RapidAPI - Portal Oficial&lt;/a&gt;&lt;/li&gt;
  2910.  &lt;li&gt;&lt;a href=&quot;https://requests.readthedocs.io/en/latest/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; title=&quot;Documentação da biblioteca Requests para Python&quot;&gt;Requests - Documentação Oficial&lt;/a&gt;&lt;/li&gt;
  2911. &lt;/ul&gt;
  2912. &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;div style=&quot;text-align:center;margin:15px 0;padding:10px;background-color:#f4f4f4;border-radius:8px;&quot;&gt;
  2913.   &lt;a href=&quot;https://www.youtube.com/@canalQb&quot; style=&quot;font-size:18px;font-weight:bold;text-decoration:none;color:#1a73e8;padding:8px 16px;border:2px solid #1a73e8;border-radius:5px;transition:all 0.3s ease;&quot;&gt;
  2914.      Clique aqui para visitar o CanalQb no YouTube
  2915.   &lt;/a&gt;
  2916. &lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://canalqb.blogspot.com/feeds/6254685310512039350/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://canalqb.blogspot.com/2025/06/como-consultar-saldo-bitcoin-via-api.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/6254685310512039350'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/6254685310512039350'/><link rel='alternate' type='text/html' href='https://canalqb.blogspot.com/2025/06/como-consultar-saldo-bitcoin-via-api.html' title='Como Consultar Saldo Bitcoin via API RapidAPI com Python'/><author><name>CanalQb</name><uri>http://www.blogger.com/profile/12641039126796028340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtt2Q0QwGuJ3OI0G29twmGKYmZvab5d8AV6fJd_HUdevW7fofyH2lDRAv39LAtg0A2x46Im5VwUT-1cfm0b4g7jgY9IKC_BbqqEV9bew_OhkddtGzaFlM4uL0LUeqS8nxK83Yufp3E6SOycslOyDA6O14vPpHRiPkTCSbb5H05NTE/s220/1QB.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s72-c/CanalQb.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5982274115355506187.post-5603812900599889792</id><published>2025-06-30T15:27:00.001-03:00</published><updated>2025-07-31T12:54:27.326-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Blockchain"/><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><title type='text'>Gerando Entropia e Frases Mnemônicas com Python para Segurança Criptográfica</title><content type='html'>&lt;!--Linha de separação superior--&gt;
  2917. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  2918.  
  2919. &lt;!--Link para o canal YouTube--&gt;
  2920. &lt;p style=&quot;text-align: center;&quot;&gt;
  2921.  &lt;a href=&quot;https://www.youtube.com/channel/UCdOA_1KzXHIp3gmVyyYv2sg&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot; title=&quot;Visite o @CanalQb no YouTube&quot;&gt;
  2922.    &lt;span style=&quot;font-size: 1.2em; font-weight: bold;&quot;&gt;@CanalQb no YouTube&lt;/span&gt;
  2923.  &lt;/a&gt;
  2924. &lt;/p&gt;
  2925.  
  2926. &lt;!--Linha de separação inferior--&gt;
  2927. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  2928.  
  2929. &lt;!--Imagem do canal--&gt;
  2930. &lt;div style=&quot;margin: 20px 0px; text-align: center;&quot;&gt;
  2931.  &lt;img alt=&quot;@CanalQb&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s2560/CanalQb.png&quot; style=&quot;border-radius: 10px; height: auto; max-width: 100%;&quot; /&gt;
  2932. &lt;/div&gt;
  2933.  
  2934. &lt;h2 style=&quot;text-align: center;&quot;&gt;Gerando Entropia e Frases Mnemônicas com Python para Segurança Criptográfica&lt;/h2&gt;
  2935.  
  2936. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  2937.  
  2938. &lt;!--Vídeo incorporado--&gt;
  2939. &lt;div style=&quot;margin-bottom: 30px; text-align: center;&quot;&gt;
  2940.  &lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; height=&quot;450&quot; loading=&quot;lazy&quot; src=&quot;https://www.youtube.com/embed/g1dFzkx_SJA?autoplay=1&amp;amp;mute=1&amp;amp;origin=https://canalqb.blogspot.com/&amp;amp;controls=1&amp;amp;rel=0&amp;amp;enablejsapi=1&amp;amp;cc_load_policy=1&quot; title=&quot;Vídeo do @CanalQb&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;
  2941. &lt;/div&gt;
  2942. &lt;p style=&quot;color: red; font-weight: bold;&quot;&gt;
  2943. Sempre crie uma frase de segurança única para jogos, testnets ou airdrops e evite usar sua carteira principal.
  2944. &lt;/p&gt;
  2945. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 80%;&quot; /&gt;
  2946. &lt;br /&gt;
  2947. &lt;h2&gt;Gerando Entropia e Frases Mnemônicas com Python para Segurança Criptográfica&lt;/h2&gt;
  2948.  
  2949. &lt;p&gt;Este artigo apresenta um script Python completo para gerar entropia hexadecimal a partir de frases mnemônicas e criar combinações válidas de frases mnemônicas utilizando a biblioteca &lt;a href=&quot;https://github.com/trezor/python-mnemonic&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; title=&quot;Repositório oficial da biblioteca Mnemonic para Python&quot;&gt;Mnemonic&lt;/a&gt;. A técnica é fundamental para criar chaves privadas seguras em criptografia e carteiras digitais.&lt;/p&gt;
  2950.  
  2951. &lt;h3&gt;Introdução à Entropia e Frases Mnemônicas&lt;/h3&gt;
  2952. &lt;p&gt;A entropia é uma medida da aleatoriedade e qualidade da chave gerada. Frases mnemônicas são sequências de palavras que representam chaves privadas, facilitando a memorização e recuperação dessas chaves em sistemas criptográficos, como carteiras Bitcoin. O padrão BIP-39 é amplamente utilizado para este fim.&lt;/p&gt;
  2953.  
  2954. &lt;h3&gt;Dependências Necessárias&lt;/h3&gt;
  2955. &lt;ul&gt;
  2956.  &lt;li&gt;Python 3.x&lt;/li&gt;
  2957.  &lt;li&gt;Biblioteca &lt;code&gt;mnemonic&lt;/code&gt;: instale via &lt;code&gt;pip install mnemonic&lt;/code&gt;&lt;/li&gt;
  2958.  &lt;li&gt;Bibliotecas padrão &lt;code&gt;itertools&lt;/code&gt;, &lt;code&gt;binascii&lt;/code&gt; e &lt;code&gt;os&lt;/code&gt;&lt;/li&gt;
  2959. &lt;/ul&gt;
  2960.  
  2961. &lt;h3&gt;Como o Script Funciona&lt;/h3&gt;
  2962.  
  2963. &lt;h4&gt;1. Geração da Entropia Hexadecimal a partir da Frase Mnemônica&lt;/h4&gt;
  2964. &lt;p&gt;Usa a classe &lt;code&gt;Mnemonic&lt;/code&gt; para converter uma frase mnemônica em sua entropia correspondente no formato hexadecimal.&lt;/p&gt;
  2965. &lt;pre&gt;&lt;code&gt;def gerar_entropia_hex(mnemonic_phrase):
  2966.    mnemo = Mnemonic(&quot;english&quot;)
  2967.    entropy = mnemo.to_entropy(mnemonic_phrase)
  2968.    hex_entropy = entropy.hex()
  2969.    return hex_entropy
  2970. &lt;/code&gt;&lt;/pre&gt;
  2971.  
  2972. &lt;h4&gt;2. Geração e Validação de Combinações de Frases Mnemônicas&lt;/h4&gt;
  2973. &lt;p&gt;Para sequências inicial e final definidas, o script gera todas as combinações possíveis, verifica quais são válidas segundo o padrão BIP-39, e imprime as frases válidas.&lt;/p&gt;
  2974. &lt;pre&gt;&lt;code&gt;def gerar_frases_validas(seq_inicio, seq_fim):
  2975.    palavras_inicio = seq_inicio.split()
  2976.    palavras_fim = seq_fim.split()
  2977.    
  2978.    if len(palavras_inicio) != len(palavras_fim):
  2979.        print(&quot;Erro: as sequências devem ter o mesmo número de palavras.&quot;)
  2980.        return
  2981.    
  2982.    combinacoes = [
  2983.        [palavras_inicio[i], palavras_fim[i]]
  2984.        for i in range(len(palavras_inicio))
  2985.    ]
  2986.    
  2987.    for comb in itertools.product(*combinacoes):
  2988.        nova_seq = &quot; &quot;.join(comb)
  2989.        if mnemo.check(nova_seq):
  2990.            print(nova_seq)
  2991. &lt;/code&gt;&lt;/pre&gt;
  2992.  
  2993. &lt;h4&gt;3. Geração de Chaves Privadas em Hexadecimal e Conversão para Frases Mnemônicas&lt;/h4&gt;
  2994. &lt;p&gt;O script processa valores hexadecimais específicos, gera a chave privada correspondente, converte para uma frase mnemônica e calcula a entropia associada.&lt;/p&gt;
  2995. &lt;pre&gt;&lt;code&gt;valores_hex = [&#39;100000000000000000&#39;, &#39;1fffffffffffffffff&#39;]
  2996.  
  2997. for valor_hex in valores_hex:
  2998.    valor_hex = valor_hex.zfill(len(valor_hex) + len(valor_hex) % 2)
  2999.    valor_bytes = bytes.fromhex(valor_hex)
  3000.    valor_bytes_full = b&#39;\x00&#39; * (32 - len(valor_bytes)) + valor_bytes
  3001.  
  3002.    private_key_hex = binascii.hexlify(valor_bytes_full).decode(&#39;utf-8&#39;)
  3003.    print(f&quot;Chave privada (hex) para o valor &#39;{valor_hex}&#39;:&quot;, private_key_hex)
  3004.  
  3005.    mnemonic_phrase = mnemo.to_mnemonic(valor_bytes_full)
  3006.    print(mnemonic_phrase)
  3007.  
  3008.    entropia_hex = gerar_entropia_hex(mnemonic_phrase)
  3009.    print(f&quot;Entropia Hexadecimal: {entropia_hex}\n&quot;)
  3010. &lt;/code&gt;&lt;/pre&gt;
  3011.  
  3012. &lt;h3&gt;Explicação Detalhada e Exemplos&lt;/h3&gt;
  3013. &lt;p&gt;O código demonstra o uso prático do padrão BIP-39 para geração de chaves privadas e suas representações mnemônicas. A geração de combinações permite explorar variações de frases que ainda sejam válidas, importante em análise de segurança e recuperação de carteiras.&lt;/p&gt;
  3014.  
  3015. &lt;p&gt;Exemplo de saída para o valor &lt;code&gt;100000000000000000&lt;/code&gt;:&lt;/p&gt;
  3016. &lt;blockquote&gt;
  3017.  &lt;p&gt;&lt;em&gt;Chave privada (hex) para o valor &#39;100000000000000000&#39;: 0000000000000000000000000000000000000000000000000000000100000000&lt;/em&gt;&lt;/p&gt;
  3018.  &lt;p&gt;&lt;em&gt;mister rocket subject outer drop nose fossil light spoil electric chapter mental traffic&lt;/em&gt;&lt;/p&gt;
  3019.  &lt;p&gt;&lt;em&gt;Entropia Hexadecimal: 4c4d8f824fd60a0b428217f5cacee6db&lt;/em&gt;&lt;/p&gt;
  3020. &lt;/blockquote&gt;
  3021.  
  3022. &lt;h3&gt;Considerações sobre Segurança&lt;/h3&gt;
  3023. &lt;p&gt;Utilizar frases mnemônicas e entropia adequadas é fundamental para garantir a segurança de carteiras digitais e chaves criptográficas. Sempre mantenha suas chaves privadas e frases mnemônicas seguras, evite compartilhar em ambientes não confiáveis e realize cópias de segurança confiáveis.&lt;/p&gt;
  3024.  
  3025. &lt;p&gt;&lt;strong&gt;Atenção:&lt;/strong&gt; Nunca invista recursos financeiros com base em chaves ou frases que não compreenda plenamente. A responsabilidade pela análise individual e segurança é essencial para evitar perdas.&lt;/p&gt;
  3026.  
  3027. &lt;h3&gt;Limpeza e Execução do Script&lt;/h3&gt;
  3028. &lt;p&gt;Antes da execução, o terminal é limpo para melhor visualização (comando adaptado para Windows e Unix):&lt;/p&gt;
  3029. &lt;pre&gt;&lt;code&gt;import os
  3030. os.system(&#39;cls&#39; if os.name == &#39;nt&#39; else &#39;clear&#39;)
  3031. &lt;/code&gt;&lt;/pre&gt;
  3032.  
  3033. &lt;h3&gt;Referências Oficiais&lt;/h3&gt;
  3034. &lt;ul&gt;
  3035.  &lt;li&gt;&lt;a href=&quot;https://github.com/trezor/python-mnemonic&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; title=&quot;Repositório oficial da biblioteca Mnemonic para Python&quot;&gt;Biblioteca Mnemonic no GitHub&lt;/a&gt;&lt;/li&gt;
  3036.  &lt;li&gt;&lt;a href=&quot;https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; title=&quot;Padrão BIP-39 para frases mnemônicas&quot;&gt;BIP-39 - Bitcoin Improvement Proposal&lt;/a&gt;&lt;/li&gt;
  3037. &lt;/ul&gt;
  3038. &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;div style=&quot;text-align:center;margin:15px 0;padding:10px;background-color:#f4f4f4;border-radius:8px;&quot;&gt;
  3039.   &lt;a href=&quot;https://www.youtube.com/@canalQb&quot; style=&quot;font-size:18px;font-weight:bold;text-decoration:none;color:#1a73e8;padding:8px 16px;border:2px solid #1a73e8;border-radius:5px;transition:all 0.3s ease;&quot;&gt;
  3040.      Clique aqui para visitar o CanalQb no YouTube
  3041.   &lt;/a&gt;
  3042. &lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://canalqb.blogspot.com/feeds/5603812900599889792/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://canalqb.blogspot.com/2025/06/gerando-entropia-e-frases-mnemonicas.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/5603812900599889792'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/5603812900599889792'/><link rel='alternate' type='text/html' href='https://canalqb.blogspot.com/2025/06/gerando-entropia-e-frases-mnemonicas.html' title='Gerando Entropia e Frases Mnemônicas com Python para Segurança Criptográfica'/><author><name>CanalQb</name><uri>http://www.blogger.com/profile/12641039126796028340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtt2Q0QwGuJ3OI0G29twmGKYmZvab5d8AV6fJd_HUdevW7fofyH2lDRAv39LAtg0A2x46Im5VwUT-1cfm0b4g7jgY9IKC_BbqqEV9bew_OhkddtGzaFlM4uL0LUeqS8nxK83Yufp3E6SOycslOyDA6O14vPpHRiPkTCSbb5H05NTE/s220/1QB.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s72-c/CanalQb.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5982274115355506187.post-5658533809081163284</id><published>2025-06-30T15:25:00.004-03:00</published><updated>2025-07-31T12:54:23.577-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Blockchain"/><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><title type='text'>Como Calcular Entropia e Converter Chaves Hexadecimais para WIF em Python</title><content type='html'>&lt;!--Linha de separação superior--&gt;
  3043. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  3044.  
  3045. &lt;!--Link para o canal YouTube--&gt;
  3046. &lt;p style=&quot;text-align: center;&quot;&gt;
  3047.  &lt;a href=&quot;https://www.youtube.com/channel/UCdOA_1KzXHIp3gmVyyYv2sg&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot; title=&quot;Visite o @CanalQb no YouTube&quot;&gt;
  3048.    &lt;span style=&quot;font-size: 1.2em; font-weight: bold;&quot;&gt;@CanalQb no YouTube&lt;/span&gt;
  3049.  &lt;/a&gt;
  3050. &lt;/p&gt;
  3051.  
  3052. &lt;!--Linha de separação inferior--&gt;
  3053. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  3054.  
  3055. &lt;!--Imagem do canal--&gt;
  3056. &lt;div style=&quot;margin: 20px 0px; text-align: center;&quot;&gt;
  3057.  &lt;img alt=&quot;@CanalQb&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s2560/CanalQb.png&quot; style=&quot;border-radius: 10px; height: auto; max-width: 100%;&quot; /&gt;
  3058. &lt;/div&gt;
  3059.  
  3060. &lt;h2 style=&quot;text-align: center;&quot;&gt;Como Calcular Entropia e Converter Chaves Hexadecimais para WIF em Python&lt;/h2&gt;
  3061.  
  3062. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  3063.  
  3064. &lt;!--Vídeo incorporado--&gt;
  3065. &lt;div style=&quot;margin-bottom: 30px; text-align: center;&quot;&gt;
  3066.  &lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; height=&quot;450&quot; loading=&quot;lazy&quot; src=&quot;https://www.youtube.com/embed/g1dFzkx_SJA?autoplay=1&amp;amp;mute=1&amp;amp;origin=https://canalqb.blogspot.com/&amp;amp;controls=1&amp;amp;rel=0&amp;amp;enablejsapi=1&amp;amp;cc_load_policy=1&quot; title=&quot;Vídeo do @CanalQb&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;
  3067. &lt;/div&gt;
  3068. &lt;p style=&quot;color: red; font-weight: bold;&quot;&gt;
  3069. Sempre crie uma frase de segurança única para jogos, testnets ou airdrops e evite usar sua carteira principal.
  3070. &lt;/p&gt;
  3071. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 80%;&quot; /&gt;
  3072. &lt;br /&gt;
  3073. &lt;h2&gt;Como Calcular Entropia e Converter Chaves Hexadecimais para WIF em Python&lt;/h2&gt;
  3074.  
  3075. &lt;p&gt;Este artigo apresenta um script Python completo que realiza cálculos de entropia para chaves em formato hexadecimal, além de converter essas chaves para o formato WIF (Wallet Import Format), muito utilizado em criptografia e Bitcoin.&lt;/p&gt;
  3076.  
  3077. &lt;h3&gt;Introdução&lt;/h3&gt;
  3078. &lt;p&gt;A entropia é uma medida da aleatoriedade de uma sequência de bits, importante para avaliar a segurança de chaves criptográficas. A conversão para WIF facilita o uso das chaves em carteiras Bitcoin. Este guia detalha as funções necessárias para manipular esses dados, utilizando a biblioteca &lt;a href=&quot;https://ofek.dev/bit/&quot; title=&quot;Biblioteca Bit para Python&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;bit&lt;/a&gt;.&lt;/p&gt;
  3079.  
  3080. &lt;h3&gt;Dependências Necessárias&lt;/h3&gt;
  3081. &lt;ul&gt;
  3082.  &lt;li&gt;Python 3.x&lt;/li&gt;
  3083.  &lt;li&gt;Biblioteca &lt;code&gt;bit&lt;/code&gt;: instale com &lt;code&gt;pip install bit&lt;/code&gt;&lt;/li&gt;
  3084.  &lt;li&gt;Biblioteca padrão &lt;code&gt;csv&lt;/code&gt; e &lt;code&gt;math&lt;/code&gt;&lt;/li&gt;
  3085. &lt;/ul&gt;
  3086.  
  3087. &lt;h3&gt;Funções do Script&lt;/h3&gt;
  3088.  
  3089. &lt;h4&gt;1. Contagem precisa de bits &#39;1&#39; em uma string hexadecimal&lt;/h4&gt;
  3090. &lt;p&gt;Converte cada caractere hexadecimal para ASCII e conta o número de bits 1:&lt;/p&gt;
  3091. &lt;pre&gt;&lt;code&gt;def calcular_bits_1_preciso(hexadecimais):
  3092.    soma_total_bits_1 = 0
  3093.    hex_cleaned = hexadecimais.strip(&quot;&#39;&quot;)
  3094.    for char in hex_cleaned:
  3095.        try:
  3096.            valor_ascii = ord(char)
  3097.            binario = format(valor_ascii, &#39;08b&#39;)
  3098.            soma_total_bits_1 += binario.count(&#39;1&#39;)
  3099.        except Exception as e:
  3100.            print(f&quot;Erro ao processar caractere &#39;{char}&#39;: {e}&quot;)
  3101.            continue
  3102.    return soma_total_bits_1
  3103. &lt;/code&gt;&lt;/pre&gt;
  3104.  
  3105. &lt;h4&gt;2. Redução iterativa de um número até um dígito&lt;/h4&gt;
  3106. &lt;p&gt;Usado para simplificar valores:&lt;/p&gt;
  3107. &lt;pre&gt;&lt;code&gt;def reduzir_digitos(numero):
  3108.    while numero &gt;= 10:
  3109.        numero = sum(int(digito) for digito in str(numero))
  3110.    return numero
  3111. &lt;/code&gt;&lt;/pre&gt;
  3112.  
  3113. &lt;h4&gt;3. Conversão de hexadecimal para bits&lt;/h4&gt;
  3114. &lt;pre&gt;&lt;code&gt;def hex_to_bits(hex_string):
  3115.    bin_string = bin(int(hex_string, 16))[2:].zfill(len(hex_string) * 4)
  3116.    return bin_string
  3117. &lt;/code&gt;&lt;/pre&gt;
  3118.  
  3119. &lt;h4&gt;4. Cálculo da entropia binária&lt;/h4&gt;
  3120. &lt;p&gt;Calcula entropia com base na frequência dos bits 0 e 1:&lt;/p&gt;
  3121. &lt;pre&gt;&lt;code&gt;def calculate_binary_entropy(bits):
  3122.    bits = bits.lstrip(&quot;0&quot;)
  3123.    bit_counts = {&#39;0&#39;: bits.count(&#39;0&#39;), &#39;1&#39;: bits.count(&#39;1&#39;)}
  3124.    total_bits = len(bits)
  3125.    if bit_counts[&#39;0&#39;] == 0 or bit_counts[&#39;1&#39;] == 0:
  3126.        return 0.0
  3127.    probabilities = [bit_counts[b] / total_bits for b in &#39;01&#39;]
  3128.    entropy = -sum(p * math.log2(p) for p in probabilities)
  3129.    return entropy
  3130. &lt;/code&gt;&lt;/pre&gt;
  3131.  
  3132. &lt;h4&gt;5. Cálculo da entropia geral da sequência de bits&lt;/h4&gt;
  3133. &lt;pre&gt;&lt;code&gt;def calculate_entropy(bits):
  3134.    bit_counts = {&#39;0&#39;: bits.count(&#39;0&#39;), &#39;1&#39;: bits.count(&#39;1&#39;)}
  3135.    total_bits = len(bits)
  3136.    probabilities = [bit_counts[&#39;0&#39;] / total_bits, bit_counts[&#39;1&#39;] / total_bits]
  3137.    entropy = -sum(p * math.log2(p) for p in probabilities if p &gt; 0)
  3138.    return entropy
  3139. &lt;/code&gt;&lt;/pre&gt;
  3140.  
  3141. &lt;h4&gt;6. Conversão de chave hexadecimal para WIF&lt;/h4&gt;
  3142. &lt;p&gt;Usando a biblioteca &lt;code&gt;bit&lt;/code&gt; para converter a chave privada hexadecimal para o formato WIF:&lt;/p&gt;
  3143. &lt;pre&gt;&lt;code&gt;def hex_to_wif(hex_private_key):
  3144.    try:
  3145.        key = Key.from_hex(hex_private_key)
  3146.        return key.to_wif()
  3147.    except Exception as e:
  3148.        print(f&quot;Erro ao converter para WIF: {e}&quot;)
  3149.        return &quot;Erro&quot;
  3150. &lt;/code&gt;&lt;/pre&gt;
  3151.  
  3152. &lt;h4&gt;7. Contagem dos bits significativos na chave&lt;/h4&gt;
  3153. &lt;pre&gt;&lt;code&gt;def count_bits(hex_string):
  3154.    bits = hex_to_bits(hex_string).zfill(64)
  3155.    significant_bits = len(bits.lstrip(&#39;0&#39;))
  3156.    return significant_bits
  3157. &lt;/code&gt;&lt;/pre&gt;
  3158.  
  3159. &lt;h3&gt;Processamento do Arquivo CSV&lt;/h3&gt;
  3160. &lt;p&gt;O script lê um arquivo CSV com colunas contendo chaves em hexadecimal, realiza os cálculos de entropia e conversões, e grava os resultados em um arquivo de saída.&lt;/p&gt;
  3161.  
  3162. &lt;p&gt;Exemplo de execução principal:&lt;/p&gt;
  3163. &lt;pre&gt;&lt;code&gt;def ler_csv_e_calcular_entropia(caminho, caminho_saida):
  3164.    with open(caminho, newline=&#39;&#39;, encoding=&#39;utf-8-sig&#39;) as csvfile:
  3165.        reader = csv.reader(csvfile, delimiter=&#39;;&#39;)
  3166.        with open(caminho_saida, mode=&#39;w&#39;, newline=&#39;&#39;, encoding=&#39;utf-8-sig&#39;) as outfile:
  3167.            writer = csv.writer(outfile, delimiter=&#39;;&#39;)
  3168.  
  3169.            writer.writerow([
  3170.                &#39;#&#39;, &#39;Private Key Range&#39;, &#39;Private Key&#39;, &#39;Public Key&#39;, &#39;Bitcoin&#39;,
  3171.                &#39;Decimal 1&#39;, &#39;Decimal 2&#39;, &#39;Decimal 3&#39;,
  3172.                &#39;Entropia 1&#39;, &#39;Entropia 2&#39;, &#39;Entropia 3&#39;,
  3173.                &#39;Entropia Binário 1&#39;, &#39;Entropia Binário 2&#39;, &#39;Entropia Binário 3&#39;,
  3174.                &#39;Binário 1&#39;, &#39;Binário 2&#39;, &#39;Binário 3&#39;, &#39;WIF 1&#39;, &#39;WIF 2&#39;, &#39;WIF 3&#39;,
  3175.                &#39;contabithex1&#39;, &#39;contabithex2&#39;, &#39;contabithex3&#39;,
  3176.                &#39;reduzint1&#39;, &#39;reduzint2&#39;, &#39;reduzint3&#39;,
  3177.                &#39;final_vs_pr&#39;, &#39;final_divide_inicio&#39;, &#39;final_divide_inicio_divide_pr&#39;, &#39;privatekey_divide_final_divide_inicio_divide_pr&#39;
  3178.            ])
  3179.  
  3180.            for i, linha in enumerate(reader):
  3181.                if i == 0:
  3182.                    continue
  3183.  
  3184.                linha_limpa = [campo.strip().strip(&quot;&#39;&quot;) for campo in linha]
  3185.                if len(linha_limpa) &lt; 4:
  3186.                    continue
  3187.  
  3188.                hex1 = linha_limpa[1].zfill(64)
  3189.                hex2 = linha_limpa[2].zfill(64)
  3190.                hex3 = linha_limpa[3].zfill(64)
  3191.  
  3192.                try:
  3193.                    if &#39;Private Key Range&#39; in [hex1, hex2, hex3]:
  3194.                        continue
  3195.  
  3196.                    bits1 = hex_to_bits(hex1)
  3197.                    bits2 = hex_to_bits(hex2)
  3198.                    bits3 = hex_to_bits(hex3)
  3199.  
  3200.                    ent1 = calculate_entropy(bits1)
  3201.                    ent2 = calculate_entropy(bits2)
  3202.                    ent3 = calculate_entropy(bits3)
  3203.  
  3204.                    ent_bin1 = calculate_binary_entropy(bits1)
  3205.                    ent_bin2 = calculate_binary_entropy(bits2)
  3206.                    ent_bin3 = calculate_binary_entropy(bits3)
  3207.  
  3208.                    wif1 = hex_to_wif(hex1)
  3209.                    wif2 = hex_to_wif(hex2)
  3210.                    wif3 = hex_to_wif(hex3)
  3211.  
  3212.                    bits_count1 = calcular_bits_1_preciso(linha_limpa[1])
  3213.                    bits_count2 = calcular_bits_1_preciso(linha_limpa[2])
  3214.                    bits_count3 = calcular_bits_1_preciso(linha_limpa[3])
  3215.  
  3216.                    reduz1 = reduzir_digitos(int(hex1, 16))
  3217.                    reduz2 = reduzir_digitos(int(hex2, 16))
  3218.                    reduz3 = reduzir_digitos(int(hex3, 16))
  3219.  
  3220.                    final_vs_pr = int(hex3, 16) * int(hex2, 16)
  3221.                    final_divide_inicio = final_vs_pr / int(hex1, 16)
  3222.                    final_divide_inicio_divide_pr = final_divide_inicio / int(hex2, 16)
  3223.                    privatekey_divide_final_divide_inicio_divide_pr = int(hex2, 16) / final_divide_inicio_divide_pr
  3224.  
  3225.                except ValueError:
  3226.                    ent1 = ent2 = ent3 = ent_bin1 = ent_bin2 = ent_bin3 = 0.0
  3227.                    wif1 = wif2 = wif3 = &quot;Erro&quot;
  3228.                    bits_count1 = bits_count2 = bits_count3 = 0
  3229.                    final_vs_pr = final_divide_inicio = final_divide_inicio_divide_pr = privatekey_divide_final_divide_inicio_divide_pr = 0
  3230.  
  3231.                linha_para_printar = [
  3232.                    linha_limpa[0],
  3233.                    f&quot;&#39;{hex1}&quot;,
  3234.                    f&quot;&#39;{hex2}&quot;,
  3235.                    f&quot;&#39;{hex3}&quot;,
  3236.                    *linha_limpa[4:],
  3237.                    f&quot;&#39;{int(hex1, 16)}&quot;, f&quot;&#39;{int(hex2, 16)}&quot;, f&quot;&#39;{int(hex3, 16)}&quot;,
  3238.                    f&quot;{ent1:.6f}&quot;.replace(&#39;.&#39;, &#39;,&#39;),
  3239.                    f&quot;{ent2:.6f}&quot;.replace(&#39;.&#39;, &#39;,&#39;),
  3240.                    f&quot;{ent3:.6f}&quot;.replace(&#39;.&#39;, &#39;,&#39;),
  3241.                    f&quot;{ent_bin1:.6f}&quot;.replace(&#39;.&#39;, &#39;,&#39;),
  3242.                    f&quot;{ent_bin2:.6f}&quot;.replace(&#39;.&#39;, &#39;,&#39;),
  3243.                    f&quot;{ent_bin3:.6f}&quot;.replace(&#39;.&#39;, &#39;,&#39;),
  3244.                    f&quot;&#39;{bits1.lstrip(&#39;0&#39;)}&quot;,
  3245.                    f&quot;&#39;{bits2.lstrip(&#39;0&#39;)}&quot;,
  3246.                    f&quot;&#39;{bits3.lstrip(&#39;0&#39;)}&quot;,
  3247.                    wif1,
  3248.                    wif2,
  3249.                    wif3,
  3250.                    bits_count1,
  3251.                    bits_count2,
  3252.                    bits_count3,
  3253.                    reduz1,
  3254.                    reduz2,
  3255.                    reduz3,
  3256.                    final_vs_pr,
  3257.                    final_divide_inicio,
  3258.                    final_divide_inicio_divide_pr,
  3259.                    privatekey_divide_final_divide_inicio_divide_pr
  3260.                ]
  3261.  
  3262.                writer.writerow(linha_para_printar)
  3263.                print(linha_para_printar)
  3264.  
  3265. if __name__ == &quot;__main__&quot;:
  3266.    ler_csv_e_calcular_entropia(&quot;pr.csv&quot;, &quot;prentropia.csv&quot;)
  3267. &lt;/code&gt;&lt;/pre&gt;
  3268.  
  3269. &lt;h3&gt;Considerações Finais&lt;/h3&gt;
  3270. &lt;p&gt;Este script é útil para quem trabalha com segurança da informação, criptografia e desenvolvimento de carteiras digitais Bitcoin. A entropia ajuda a validar a qualidade das chaves geradas, enquanto a conversão para WIF permite uso prático em ferramentas compatíveis.&lt;/p&gt;
  3271.  
  3272. &lt;p&gt;&lt;strong&gt;Atenção:&lt;/strong&gt; Sempre avalie individualmente os riscos antes de manipular ou investir recursos baseados em chaves criptográficas. Use este script para aprendizado e análise técnica, não como conselho financeiro.&lt;/p&gt;
  3273. &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;div style=&quot;text-align:center;margin:15px 0;padding:10px;background-color:#f4f4f4;border-radius:8px;&quot;&gt;
  3274.   &lt;a href=&quot;https://www.youtube.com/@canalQb&quot; style=&quot;font-size:18px;font-weight:bold;text-decoration:none;color:#1a73e8;padding:8px 16px;border:2px solid #1a73e8;border-radius:5px;transition:all 0.3s ease;&quot;&gt;
  3275.      Clique aqui para visitar o CanalQb no YouTube
  3276.   &lt;/a&gt;
  3277. &lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://canalqb.blogspot.com/feeds/5658533809081163284/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://canalqb.blogspot.com/2025/06/como-calcular-entropia-e-converter.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/5658533809081163284'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/5658533809081163284'/><link rel='alternate' type='text/html' href='https://canalqb.blogspot.com/2025/06/como-calcular-entropia-e-converter.html' title='Como Calcular Entropia e Converter Chaves Hexadecimais para WIF em Python'/><author><name>CanalQb</name><uri>http://www.blogger.com/profile/12641039126796028340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtt2Q0QwGuJ3OI0G29twmGKYmZvab5d8AV6fJd_HUdevW7fofyH2lDRAv39LAtg0A2x46Im5VwUT-1cfm0b4g7jgY9IKC_BbqqEV9bew_OhkddtGzaFlM4uL0LUeqS8nxK83Yufp3E6SOycslOyDA6O14vPpHRiPkTCSbb5H05NTE/s220/1QB.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s72-c/CanalQb.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5982274115355506187.post-7051208349980872531</id><published>2025-06-30T15:24:00.001-03:00</published><updated>2025-07-31T12:54:20.932-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Blockchain"/><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><title type='text'>Análise de Entropia e Cálculos Avançados com Python para Chaves Privadas Bitcoin</title><content type='html'>&lt;!--Linha de separação superior--&gt;
  3278. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  3279.  
  3280. &lt;!--Link para o canal YouTube--&gt;
  3281. &lt;p style=&quot;text-align: center;&quot;&gt;
  3282.  &lt;a href=&quot;https://www.youtube.com/channel/UCdOA_1KzXHIp3gmVyyYv2sg&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot; title=&quot;Visite o @CanalQb no YouTube&quot;&gt;
  3283.    &lt;span style=&quot;font-size: 1.2em; font-weight: bold;&quot;&gt;@CanalQb no YouTube&lt;/span&gt;
  3284.  &lt;/a&gt;
  3285. &lt;/p&gt;
  3286.  
  3287. &lt;!--Linha de separação inferior--&gt;
  3288. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  3289.  
  3290. &lt;!--Imagem do canal--&gt;
  3291. &lt;div style=&quot;margin: 20px 0px; text-align: center;&quot;&gt;
  3292.  &lt;img alt=&quot;@CanalQb&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s2560/CanalQb.png&quot; style=&quot;border-radius: 10px; height: auto; max-width: 100%;&quot; /&gt;
  3293. &lt;/div&gt;
  3294.  
  3295. &lt;h2 style=&quot;text-align: center;&quot;&gt;Análise de Entropia e Cálculos Avançados com Python para Chaves Privadas Bitcoin&lt;/h2&gt;
  3296.  
  3297. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  3298.  
  3299. &lt;!--Vídeo incorporado--&gt;
  3300. &lt;div style=&quot;margin-bottom: 30px; text-align: center;&quot;&gt;
  3301.  &lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; height=&quot;450&quot; loading=&quot;lazy&quot; src=&quot;https://www.youtube.com/embed/g1dFzkx_SJA?autoplay=1&amp;amp;mute=1&amp;amp;origin=https://canalqb.blogspot.com/&amp;amp;controls=1&amp;amp;rel=0&amp;amp;enablejsapi=1&amp;amp;cc_load_policy=1&quot; title=&quot;Vídeo do @CanalQb&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;
  3302. &lt;/div&gt;
  3303. &lt;p style=&quot;color: red; font-weight: bold;&quot;&gt;
  3304. Sempre crie uma frase de segurança única para jogos, testnets ou airdrops e evite usar sua carteira principal.
  3305. &lt;/p&gt;
  3306. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 80%;&quot; /&gt;
  3307. &lt;br /&gt;
  3308. &lt;h2&gt;Análise de Entropia e Cálculos Avançados com Python para Chaves Privadas Bitcoin&lt;/h2&gt;
  3309.  
  3310. &lt;p&gt;Este artigo apresenta um script em Python para realizar uma análise detalhada da entropia em dados hexadecimais, especificamente aplicados a chaves privadas e públicas no contexto do Bitcoin. O código realiza diversas operações matemáticas e estatísticas, além de processar arquivos CSV para leitura e geração de relatórios. A seguir, explicamos cada parte do processo, garantindo que o conteúdo esteja otimizado para SEO e conforme as diretrizes do Google AdSense e Search Console.&lt;/p&gt;
  3311.  
  3312. &lt;h3&gt;Objetivo do Script&lt;/h3&gt;
  3313. &lt;p&gt;O script tem como objetivo ler um arquivo CSV contendo chaves privadas em formato hexadecimal, calcular a entropia de cada chave, converter valores hexadecimais para binários e decimais, e realizar cálculos matemáticos relevantes para análise criptográfica.&lt;/p&gt;
  3314.  
  3315. &lt;h3&gt;Funções Principais do Código&lt;/h3&gt;
  3316. &lt;ul&gt;
  3317.  &lt;li&gt;&lt;strong&gt;hex_to_bits(hex_string):&lt;/strong&gt; Converte uma string hexadecimal para uma representação binária (bits), garantindo que o resultado tenha o tamanho correto preenchido com zeros à esquerda.&lt;/li&gt;
  3318.  &lt;li&gt;&lt;strong&gt;calculate_entropy(bits):&lt;/strong&gt; Calcula a entropia de Shannon para uma string de bits, fornecendo uma medida da aleatoriedade dos dados.&lt;/li&gt;
  3319.  &lt;li&gt;&lt;strong&gt;ler_csv_e_calcular_entropia(caminho, caminho_saida):&lt;/strong&gt; Lê os dados de um arquivo CSV, processa cada linha calculando as métricas solicitadas e grava os resultados em um novo arquivo CSV.&lt;/li&gt;
  3320. &lt;/ul&gt;
  3321.  
  3322. &lt;h3&gt;Descrição Técnica&lt;/h3&gt;
  3323. &lt;p&gt;O processamento inicia-se lendo o arquivo CSV (&lt;code&gt;pr.csv&lt;/code&gt;) que contém dados hexadecimais correspondentes a chaves privadas e outras informações. Para cada linha:&lt;/p&gt;
  3324. &lt;ol&gt;
  3325.  &lt;li&gt;Os valores hexadecimais são normalizados com preenchimento zero para 64 caracteres.&lt;/li&gt;
  3326.  &lt;li&gt;É feita a conversão para bits para cálculo da entropia usando a fórmula de Shannon.&lt;/li&gt;
  3327.  &lt;li&gt;Os valores hexadecimais são convertidos para inteiros decimais para possibilitar operações matemáticas.&lt;/li&gt;
  3328.  &lt;li&gt;São calculadas diversas divisões e diferenças, que podem ser usadas para análises comparativas e detecção de padrões.&lt;/li&gt;
  3329.  &lt;li&gt;O resultado é formatado cuidadosamente para compatibilidade com programas como Excel, utilizando aspas simples para preservar valores numéricos.&lt;/li&gt;
  3330. &lt;/ol&gt;
  3331.  
  3332. &lt;h3&gt;Exemplo de Saída Gerada&lt;/h3&gt;
  3333. &lt;p&gt;O arquivo de saída (&lt;code&gt;prentropia.csv&lt;/code&gt;) contém as seguintes colunas:&lt;/p&gt;
  3334. &lt;ul&gt;
  3335.  &lt;li&gt;&lt;strong&gt;#&lt;/strong&gt;: Identificador da linha&lt;/li&gt;
  3336.  &lt;li&gt;&lt;strong&gt;Private Key Range&lt;/strong&gt;: Intervalos de chaves privadas&lt;/li&gt;
  3337.  &lt;li&gt;&lt;strong&gt;Private Key / Public Key&lt;/strong&gt;: Dados criptográficos relacionados&lt;/li&gt;
  3338.  &lt;li&gt;&lt;strong&gt;Bitcoin&lt;/strong&gt;: Informações relativas a endereços Bitcoin&lt;/li&gt;
  3339.  &lt;li&gt;&lt;strong&gt;Decimal 1, 2 e 3&lt;/strong&gt;: Valores decimais das chaves&lt;/li&gt;
  3340.  &lt;li&gt;&lt;strong&gt;Entropia 1, 2 e 3&lt;/strong&gt;: Valores de entropia calculados para cada chave&lt;/li&gt;
  3341.  &lt;li&gt;&lt;strong&gt;Tamanho 1, 2 e 3&lt;/strong&gt;: Valores derivados dos cálculos matemáticos&lt;/li&gt;
  3342. &lt;/ul&gt;
  3343.  
  3344. &lt;h3&gt;Boas Práticas e Considerações&lt;/h3&gt;
  3345. &lt;p&gt;Este script é um exemplo avançado de manipulação de dados e cálculo estatístico aplicado a criptografia. Para uso em contextos reais, recomenda-se entender profundamente as operações matemáticas e criptográficas envolvidas. A entropia, por exemplo, é um indicativo da segurança e aleatoriedade de chaves criptográficas.&lt;/p&gt;
  3346.  
  3347. &lt;p&gt;&lt;strong&gt;Responsabilidade:&lt;/strong&gt; Antes de usar qualquer script para investimento ou manipulação de criptomoedas, avalie cuidadosamente os riscos e busque conhecimento adequado para evitar perdas financeiras.&lt;/p&gt;
  3348.  
  3349. &lt;h3&gt;Referências e Links Oficiais&lt;/h3&gt;
  3350. &lt;ul&gt;
  3351.  &lt;li&gt;Python CSV Module: &lt;a href=&quot;https://docs.python.org/3/library/csv.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.python.org/3/library/csv.html&lt;/a&gt;&lt;/li&gt;
  3352.  &lt;li&gt;Entropia de Shannon: &lt;a href=&quot;https://en.wikipedia.org/wiki/Entropy_(information_theory)&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://en.wikipedia.org/wiki/Entropy_(information_theory)&lt;/a&gt;&lt;/li&gt;
  3353. &lt;/ul&gt;
  3354.  
  3355. &lt;h3&gt;Código Completo Otimizado&lt;/h3&gt;
  3356. &lt;pre&gt;&lt;code&gt;import csv
  3357. import math
  3358.  
  3359. def hex_to_bits(hex_string):
  3360.    bin_string = bin(int(hex_string, 16))[2:].zfill(len(hex_string) * 4)
  3361.    return bin_string
  3362.  
  3363. def calculate_entropy(bits):
  3364.    bit_counts = {&#39;0&#39;: bits.count(&#39;0&#39;), &#39;1&#39;: bits.count(&#39;1&#39;)}
  3365.    total_bits = len(bits)
  3366.    probabilities = [bit_counts[&#39;0&#39;] / total_bits, bit_counts[&#39;1&#39;] / total_bits]
  3367.    entropy = -sum(p * math.log2(p) for p in probabilities if p &gt; 0)
  3368.    return entropy
  3369.  
  3370. caminho_csv = &quot;pr.csv&quot;
  3371. caminho_saida = &quot;prentropia.csv&quot;
  3372.  
  3373. def ler_csv_e_calcular_entropia(caminho, caminho_saida):
  3374.    with open(caminho, newline=&#39;&#39;, encoding=&#39;utf-8-sig&#39;) as csvfile:
  3375.        reader = csv.reader(csvfile, delimiter=&#39;;&#39;)
  3376.  
  3377.        with open(caminho_saida, mode=&#39;w&#39;, newline=&#39;&#39;, encoding=&#39;utf-8&#39;) as outfile:
  3378.            writer = csv.writer(outfile, delimiter=&#39;;&#39;)
  3379.  
  3380.            writer.writerow([
  3381.                &#39;#&#39;, &#39;Private Key Range&#39;, &#39;&#39;, &#39;Private Key / Public Key&#39;, &#39;Bitcoin&#39;,
  3382.                &#39;Decimal 1&#39;, &#39;Decimal 2&#39;, &#39;Decimal 3&#39;,
  3383.                &#39;Entropia 1&#39;, &#39;Entropia 2&#39;, &#39;Entropia 3&#39;,
  3384.                &#39;Tamanho 1&#39;, &#39;Tamanho 2&#39;, &#39;Tamanho 3&#39;
  3385.            ])
  3386.            divs3_anterior = 0
  3387.            for linha in reader:
  3388.                linha_limpa = [campo.strip().strip(&quot;&#39;&quot;) for campo in linha]
  3389.                
  3390.                if len(linha_limpa) &lt; 4:
  3391.                    continue
  3392.  
  3393.                hex1 = linha_limpa[1].zfill(64)
  3394.                hex2 = linha_limpa[2].zfill(64)
  3395.                hex3 = linha_limpa[3].zfill(64)
  3396.                
  3397.                diferenca_divs3 = 0
  3398.                try:
  3399.                    bits1 = hex_to_bits(hex1)
  3400.                    bits2 = hex_to_bits(hex2)
  3401.                    bits3 = hex_to_bits(hex3)
  3402.  
  3403.                    ent1 = calculate_entropy(bits1)
  3404.                    ent2 = calculate_entropy(bits2)
  3405.                    ent3 = calculate_entropy(bits3)
  3406.  
  3407.                    dec1 = int(hex1, 16)
  3408.                    dec2 = int(hex2, 16)
  3409.                    dec3 = int(hex3, 16)
  3410.                    
  3411.                    divs1 = dec2 * dec3  
  3412.                    divs2 = divs1 / dec1 if dec1 != 0 else 0
  3413.                    divs3 = divs2 / dec2 if dec2 != 0 else 0
  3414.                    divs4 = dec2 / divs3 if divs3 != 0 else 0
  3415.                    diferenca_divs3 = divs3 - divs3_anterior
  3416.  
  3417.                    divs3_anterior = divs3
  3418.                    
  3419.                    try:
  3420.                        final_vs_pr = dec3 * dec2
  3421.                        final_divide_inicio = final_vs_pr / dec1 if dec1 != 0 else 0
  3422.                        final_divide_inicio_divide_pr = final_divide_inicio / dec2 if dec2 != 0 else 0
  3423.                        privatekey_divide_final_divide_inicio_divide_pr = dec2 / final_divide_inicio_divide_pr if final_divide_inicio_divide_pr != 0 else 0
  3424.                    except ZeroDivisionError:
  3425.                        final_vs_pr = final_divide_inicio = final_divide_inicio_divide_pr = privatekey_divide_final_divide_inicio_divide_pr = 0
  3426.  
  3427.                except ValueError:
  3428.                    ent1 = ent2 = ent3 = 0.0
  3429.                    dec1 = dec2 = dec3 = 0
  3430.                    divs1 = divs2 = divs3 = divs4 = 0
  3431.                    diferenca_divs3 = 0
  3432.  
  3433.                display_hex1 = hex1.lstrip(&quot;0&quot;) or &quot;0&quot;
  3434.                display_hex2 = hex2.lstrip(&quot;0&quot;) or &quot;0&quot;
  3435.                display_hex3 = hex3.lstrip(&quot;0&quot;) or &quot;0&quot;
  3436.  
  3437.                ent1_formatted = f&quot;{ent1:,.6f}&quot;.replace(&#39;.&#39;, &#39;,&#39;)
  3438.                ent2_formatted = f&quot;{ent2:,.6f}&quot;.replace(&#39;.&#39;, &#39;,&#39;)
  3439.                ent3_formatted = f&quot;{ent3:,.6f}&quot;.replace(&#39;.&#39;, &#39;,&#39;)
  3440.                
  3441.                linha_para_printar = [
  3442.                    linha_limpa[0], display_hex1, display_hex2, display_hex3,
  3443.                    *linha_limpa[4:],
  3444.                    f&quot;&#39;{dec1}&quot;, f&quot;&#39;{dec2}&quot;, f&quot;&#39;{dec3}&quot;,
  3445.                    divs1, divs2, divs3, divs4,
  3446.                    f&quot;&#39;{diferenca_divs3:.10f}&quot;.replace(&#39;.&#39;, &#39;,&#39;),
  3447.                    f&quot;&#39;{divs3_anterior:.10f}&quot;.replace(&#39;.&#39;, &#39;,&#39;)
  3448.                ]
  3449.  
  3450.                writer.writerow(linha_para_printar)
  3451.                print(linha_para_printar)
  3452.  
  3453. if __name__ == &quot;__main__&quot;:
  3454.    ler_csv_e_calcular_entropia(caminho_csv, caminho_saida)
  3455. &lt;/code&gt;&lt;/pre&gt;
  3456. &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;div style=&quot;text-align:center;margin:15px 0;padding:10px;background-color:#f4f4f4;border-radius:8px;&quot;&gt;
  3457.   &lt;a href=&quot;https://www.youtube.com/@canalQb&quot; style=&quot;font-size:18px;font-weight:bold;text-decoration:none;color:#1a73e8;padding:8px 16px;border:2px solid #1a73e8;border-radius:5px;transition:all 0.3s ease;&quot;&gt;
  3458.      Clique aqui para visitar o CanalQb no YouTube
  3459.   &lt;/a&gt;
  3460. &lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://canalqb.blogspot.com/feeds/7051208349980872531/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://canalqb.blogspot.com/2025/06/analise-de-entropia-e-calculos.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/7051208349980872531'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/7051208349980872531'/><link rel='alternate' type='text/html' href='https://canalqb.blogspot.com/2025/06/analise-de-entropia-e-calculos.html' title='Análise de Entropia e Cálculos Avançados com Python para Chaves Privadas Bitcoin'/><author><name>CanalQb</name><uri>http://www.blogger.com/profile/12641039126796028340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtt2Q0QwGuJ3OI0G29twmGKYmZvab5d8AV6fJd_HUdevW7fofyH2lDRAv39LAtg0A2x46Im5VwUT-1cfm0b4g7jgY9IKC_BbqqEV9bew_OhkddtGzaFlM4uL0LUeqS8nxK83Yufp3E6SOycslOyDA6O14vPpHRiPkTCSbb5H05NTE/s220/1QB.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s72-c/CanalQb.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5982274115355506187.post-8749917191165606330</id><published>2025-06-30T15:22:00.002-03:00</published><updated>2025-07-31T12:54:17.893-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Blockchain"/><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><title type='text'>Gerador de Sequências Pseudoaleatórias para Chaves Bitcoin com Python</title><content type='html'>&lt;!--Linha de separação superior--&gt;
  3461. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  3462.  
  3463. &lt;!--Link para o canal YouTube--&gt;
  3464. &lt;p style=&quot;text-align: center;&quot;&gt;
  3465.  &lt;a href=&quot;https://www.youtube.com/channel/UCdOA_1KzXHIp3gmVyyYv2sg&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot; title=&quot;Visite o @CanalQb no YouTube&quot;&gt;
  3466.    &lt;span style=&quot;font-size: 1.2em; font-weight: bold;&quot;&gt;@CanalQb no YouTube&lt;/span&gt;
  3467.  &lt;/a&gt;
  3468. &lt;/p&gt;
  3469.  
  3470. &lt;!--Linha de separação inferior--&gt;
  3471. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  3472.  
  3473. &lt;!--Imagem do canal--&gt;
  3474. &lt;div style=&quot;margin: 20px 0px; text-align: center;&quot;&gt;
  3475.  &lt;img alt=&quot;@CanalQb&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s2560/CanalQb.png&quot; style=&quot;border-radius: 10px; height: auto; max-width: 100%;&quot; /&gt;
  3476. &lt;/div&gt;
  3477.  
  3478. &lt;h2 style=&quot;text-align: center;&quot;&gt;Gerador de Sequências Pseudoaleatórias para Chaves Bitcoin com Python&lt;/h2&gt;
  3479.  
  3480. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  3481.  
  3482. &lt;!--Vídeo incorporado--&gt;
  3483. &lt;div style=&quot;margin-bottom: 30px; text-align: center;&quot;&gt;
  3484.  &lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; height=&quot;450&quot; loading=&quot;lazy&quot; src=&quot;https://www.youtube.com/embed/g1dFzkx_SJA?autoplay=1&amp;amp;mute=1&amp;amp;origin=https://canalqb.blogspot.com/&amp;amp;controls=1&amp;amp;rel=0&amp;amp;enablejsapi=1&amp;amp;cc_load_policy=1&quot; title=&quot;Vídeo do @CanalQb&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;
  3485. &lt;/div&gt;
  3486. &lt;p style=&quot;color: red; font-weight: bold;&quot;&gt;
  3487. Sempre crie uma frase de segurança única para jogos, testnets ou airdrops e evite usar sua carteira principal.
  3488. &lt;/p&gt;
  3489. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 80%;&quot; /&gt;
  3490. &lt;br /&gt;
  3491. &lt;h2&gt;Gerador de Sequências Pseudoaleatórias para Chaves Bitcoin com Python&lt;/h2&gt;
  3492.  
  3493. &lt;p&gt;Este artigo apresenta um script em Python que gera sequências pseudoaleatórias de números inteiros muito grandes, interpretados como chaves privadas Bitcoin. A partir desses números, o script converte para o formato WIF (Wallet Import Format) comprimido e calcula o endereço Bitcoin correspondente.&lt;/p&gt;
  3494.  
  3495. &lt;h3&gt;Funcionamento do Script&lt;/h3&gt;
  3496. &lt;p&gt;O script utiliza uma abordagem eficiente de geração sem armazenar a sequência completa em memória, evitando sobrecarga computacional. A ideia é gerar sequências pseudoaleatórias baseadas em um &lt;em&gt;seed&lt;/em&gt; inicial dentro de um intervalo definido pelo parâmetro &lt;code&gt;x_expoente&lt;/code&gt;, que determina a faixa numérica do gerador.&lt;/p&gt;
  3497.  
  3498. &lt;h3&gt;Detalhes Técnicos&lt;/h3&gt;
  3499. &lt;ul&gt;
  3500.  &lt;li&gt;&lt;strong&gt;Intervalo:&lt;/strong&gt; números entre 2&lt;sup&gt;x_expoente-1&lt;/sup&gt; e 2&lt;sup&gt;x_expoente&lt;/sup&gt; - 1;&lt;/li&gt;
  3501.  &lt;li&gt;&lt;strong&gt;Seed:&lt;/strong&gt; ponto inicial da sequência dentro do intervalo;&lt;/li&gt;
  3502.  &lt;li&gt;&lt;strong&gt;Gerador:&lt;/strong&gt; fórmula recursiva &lt;code&gt;x = (x * 7 + 3) % intervalo + inicio&lt;/code&gt; para gerar a sequência;&lt;/li&gt;
  3503.  &lt;li&gt;&lt;strong&gt;Chave privada:&lt;/strong&gt; cada número é convertido para bytes e transformado em chave privada Bitcoin;&lt;/li&gt;
  3504.  &lt;li&gt;&lt;strong&gt;WIF comprimido:&lt;/strong&gt; formato utilizado para importar/exportar chaves privadas;&lt;/li&gt;
  3505.  &lt;li&gt;&lt;strong&gt;Endereço Bitcoin:&lt;/strong&gt; derivado da chave privada.&lt;/li&gt;
  3506. &lt;/ul&gt;
  3507.  
  3508. &lt;h3&gt;Objetivo e Aplicação&lt;/h3&gt;
  3509. &lt;p&gt;O script busca encontrar um endereço Bitcoin específico, gerando sequências a partir de seeds consecutivas e testando os endereços derivados. Se o endereço alvo for encontrado, a chave WIF e o endereço são salvos em arquivo texto, e a execução é encerrada.&lt;/p&gt;
  3510.  
  3511. &lt;h3&gt;Exemplo de Saída do Script&lt;/h3&gt;
  3512. &lt;pre&gt;&lt;code&gt;Intervalo de busca:
  3513.  Decimal:   1180591620717411303424 até 2361183241434822606847
  3514.  Hexadecimal: 0x1000000000000000000 até 0x1fffffffffffffffff
  3515.  
  3516. Este script gera sequências pseudoaleatórias de números dentro de um intervalo definido por &#39;x_expoente&#39;.
  3517. Para cada número gerado, ele interpreta como uma chave privada Bitcoin, gera a WIF comprimida e o endereço correspondente.
  3518. O parâmetro &#39;length&#39; determina quantos números cada sequência terá.
  3519. O script começa com uma seed inicial e gera uma sequência de &#39;length&#39; números.
  3520. Se o endereço alvo não for encontrado nessa sequência, ele incrementa a seed em 1 e gera uma nova sequência de &#39;length&#39; números.
  3521. Esse processo se repete até percorrer todo o intervalo definido por &#39;x_expoente&#39; ou até encontrar o endereço desejado.
  3522. Quando o endereço alvo é encontrado, o script salva a chave WIF e o endereço em um arquivo .txt com o nome do endereço e finaliza a execução.
  3523. &lt;/code&gt;&lt;/pre&gt;
  3524.  
  3525. &lt;h3&gt;Considerações Importantes&lt;/h3&gt;
  3526. &lt;ul&gt;
  3527.  &lt;li&gt;O intervalo definido por &lt;code&gt;x_expoente&lt;/code&gt; gera números muito grandes, tornando a busca exaustiva inviável para o intervalo completo;&lt;/li&gt;
  3528.  &lt;li&gt;Para buscas em espaços tão vastos, recomenda-se usar amostragem aleatória, computação distribuída ou algoritmos especializados;&lt;/li&gt;
  3529.  &lt;li&gt;Este script é educativo e deve ser usado com responsabilidade, entendendo os riscos e limitações na segurança de chaves criptográficas;&lt;/li&gt;
  3530. &lt;/ul&gt;
  3531.  
  3532. &lt;h3&gt;Como Utilizar&lt;/h3&gt;
  3533. &lt;ol&gt;
  3534.  &lt;li&gt;Configure o valor de &lt;code&gt;x_expoente&lt;/code&gt; para definir o intervalo;&lt;/li&gt;
  3535.  &lt;li&gt;Defina o endereço Bitcoin alvo para busca;&lt;/li&gt;
  3536.  &lt;li&gt;Execute o script em ambiente Python com as bibliotecas &lt;code&gt;bit&lt;/code&gt; instaladas;&lt;/li&gt;
  3537.  &lt;li&gt;Acompanhe a saída no console para saber se o endereço foi encontrado.&lt;/li&gt;
  3538. &lt;/ol&gt;
  3539.  
  3540. &lt;h3&gt;Bibliotecas e Referências Oficiais&lt;/h3&gt;
  3541. &lt;ul&gt;
  3542.  &lt;li&gt;&lt;a href=&quot;https://ofek.dev/bit/&quot; title=&quot;Documentação oficial da biblioteca bit&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;Bit - Biblioteca Python para Bitcoin&lt;/a&gt;&lt;/li&gt;
  3543.  &lt;li&gt;&lt;a href=&quot;https://docs.python.org/3/&quot; title=&quot;Documentação oficial do Python&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;Python Official Documentation&lt;/a&gt;&lt;/li&gt;
  3544. &lt;/ul&gt;
  3545.  
  3546. &lt;h3&gt;Script Completo&lt;/h3&gt;
  3547. &lt;pre&gt;&lt;code&gt;from bit import PrivateKey
  3548. from bit.format import bytes_to_wif
  3549. import sys
  3550.  
  3551. def pseudo_random_sequence_generator(x_expoente, seed, length):
  3552.    &quot;&quot;&quot;
  3553.    Gera uma sequência pseudoaleatória de números usando um gerador,
  3554.    evitando armazenar a sequência inteira na memória.
  3555.    &quot;&quot;&quot;
  3556.    inicio = 2 ** (x_expoente - 1)
  3557.    fim = (2 ** x_expoente) - 1
  3558.    intervalo = fim - inicio + 1  # tamanho do intervalo
  3559.    
  3560.    if not (inicio &lt;= seed &lt;= fim):
  3561.        raise ValueError(f&quot;Seed {seed} está fora do intervalo [{inicio}, {fim}]&quot;)
  3562.    
  3563.    x = seed
  3564.    yield x  # Produz a seed inicial
  3565.    for _ in range(length - 1):
  3566.        x = (x * 7 + 3) % intervalo + inicio
  3567.        yield x  # Produz o próximo número da sequência
  3568.  
  3569. # Parâmetros
  3570. x_expoente = 71
  3571. length = 500
  3572.  
  3573. inicio = 2 ** (x_expoente - 1)
  3574. fim = (2 ** x_expoente) - 1
  3575.  
  3576. print(f&quot;Intervalo de busca:&quot;)
  3577. print(f&quot;  Decimal:   {inicio} até {fim}&quot;)
  3578. print(f&quot;  Hexadecimal: {hex(inicio)} até {hex(fim)}\n&quot;)
  3579.  
  3580. target_address = &quot;1PWo3JeB9jrGwfHDNpdGK54CRas7fsVzXU&quot;
  3581.  
  3582. print(
  3583.    &quot;Este script gera sequências pseudoaleatórias de números dentro de um intervalo definido por &#39;x_expoente&#39;.\n&quot;
  3584.    &quot;Para cada número gerado, ele interpreta como uma chave privada Bitcoin, gera a WIF comprimida e o endereço correspondente.\n&quot;
  3585.    &quot;O parâmetro &#39;length&#39; determina quantos números cada sequência terá.\n&quot;
  3586.    &quot;O script começa com uma seed inicial e gera uma sequência de &#39;length&#39; números.\n&quot;
  3587.    &quot;Se o endereço alvo não for encontrado nessa sequência, ele incrementa a seed em 1 e gera uma nova sequência de &#39;length&#39; números.\n&quot;
  3588.    &quot;Esse processo se repete até percorrer todo o intervalo definido por &#39;x_expoente&#39; ou até encontrar o endereço desejado.\n&quot;
  3589.    &quot;Quando o endereço alvo é encontrado, o script salva a chave WIF e o endereço em um arquivo .txt com o nome do endereço e finaliza a execução.\n&quot;
  3590. )
  3591.  
  3592. for seed in range(inicio, fim + 5):  # Limite pequeno para exemplo
  3593.    for num in pseudo_random_sequence_generator(x_expoente, seed, length):
  3594.        private_key_bytes = num.to_bytes(32, byteorder=&#39;big&#39;)
  3595.        wif_compressed = bytes_to_wif(private_key_bytes, compressed=True)
  3596.        key = PrivateKey(wif_compressed)
  3597.        print(f&quot;{num} - WIF: {wif_compressed}, Endereço: {key.address}&quot;, end=&quot;\r&quot;)
  3598.        
  3599.        if key.address == target_address:
  3600.            filename = f&quot;{target_address}.txt&quot;
  3601.            with open(filename, &quot;w&quot;) as f:
  3602.                f.write(f&quot;WIF: {wif_compressed}\n&quot;)
  3603.                f.write(f&quot;Endereço: {key.address}\n&quot;)
  3604.            print(f&quot;\nEndereço alvo encontrado! Dados salvos em {filename}&quot;)
  3605.            sys.exit(0)
  3606. &lt;/code&gt;&lt;/pre&gt;
  3607.  
  3608. &lt;p&gt;&lt;strong&gt;Nota:&lt;/strong&gt; Este conteúdo é para fins educativos e não deve ser utilizado para tentativa de acesso não autorizado a carteiras Bitcoin. Sempre faça análise crítica e invista com responsabilidade.&lt;/p&gt;
  3609. &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;div style=&quot;text-align:center;margin:15px 0;padding:10px;background-color:#f4f4f4;border-radius:8px;&quot;&gt;
  3610.   &lt;a href=&quot;https://www.youtube.com/@canalQb&quot; style=&quot;font-size:18px;font-weight:bold;text-decoration:none;color:#1a73e8;padding:8px 16px;border:2px solid #1a73e8;border-radius:5px;transition:all 0.3s ease;&quot;&gt;
  3611.      Clique aqui para visitar o CanalQb no YouTube
  3612.   &lt;/a&gt;
  3613. &lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://canalqb.blogspot.com/feeds/8749917191165606330/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://canalqb.blogspot.com/2025/06/gerador-de-sequencias-pseudoaleatorias.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/8749917191165606330'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/8749917191165606330'/><link rel='alternate' type='text/html' href='https://canalqb.blogspot.com/2025/06/gerador-de-sequencias-pseudoaleatorias.html' title='Gerador de Sequências Pseudoaleatórias para Chaves Bitcoin com Python'/><author><name>CanalQb</name><uri>http://www.blogger.com/profile/12641039126796028340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtt2Q0QwGuJ3OI0G29twmGKYmZvab5d8AV6fJd_HUdevW7fofyH2lDRAv39LAtg0A2x46Im5VwUT-1cfm0b4g7jgY9IKC_BbqqEV9bew_OhkddtGzaFlM4uL0LUeqS8nxK83Yufp3E6SOycslOyDA6O14vPpHRiPkTCSbb5H05NTE/s220/1QB.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s72-c/CanalQb.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5982274115355506187.post-7956548430127367939</id><published>2025-06-30T15:20:00.002-03:00</published><updated>2025-07-31T12:54:15.052-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><title type='text'>Ajuste Polinomial para Estimar PVK: Análise e Previsão com Python</title><content type='html'>&lt;!--Linha de separação superior--&gt;
  3614. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  3615.  
  3616. &lt;!--Link para o canal YouTube--&gt;
  3617. &lt;p style=&quot;text-align: center;&quot;&gt;
  3618.  &lt;a href=&quot;https://www.youtube.com/channel/UCdOA_1KzXHIp3gmVyyYv2sg&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot; title=&quot;Visite o @CanalQb no YouTube&quot;&gt;
  3619.    &lt;span style=&quot;font-size: 1.2em; font-weight: bold;&quot;&gt;@CanalQb no YouTube&lt;/span&gt;
  3620.  &lt;/a&gt;
  3621. &lt;/p&gt;
  3622.  
  3623. &lt;!--Linha de separação inferior--&gt;
  3624. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  3625.  
  3626. &lt;!--Imagem do canal--&gt;
  3627. &lt;div style=&quot;margin: 20px 0px; text-align: center;&quot;&gt;
  3628.  &lt;img alt=&quot;@CanalQb&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s2560/CanalQb.png&quot; style=&quot;border-radius: 10px; height: auto; max-width: 100%;&quot; /&gt;
  3629. &lt;/div&gt;
  3630.  
  3631. &lt;h2 style=&quot;text-align: center;&quot;&gt;Ajuste Polinomial para Estimar PVK: Análise e Previsão com Python&lt;/h2&gt;
  3632.  
  3633. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  3634.  
  3635. &lt;!--Vídeo incorporado--&gt;
  3636. &lt;div style=&quot;margin-bottom: 30px; text-align: center;&quot;&gt;
  3637.  &lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; height=&quot;450&quot; loading=&quot;lazy&quot; src=&quot;https://www.youtube.com/embed/g1dFzkx_SJA?autoplay=1&amp;amp;mute=1&amp;amp;origin=https://canalqb.blogspot.com/&amp;amp;controls=1&amp;amp;rel=0&amp;amp;enablejsapi=1&amp;amp;cc_load_policy=1&quot; title=&quot;Vídeo do @CanalQb&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;
  3638. &lt;/div&gt;
  3639. &lt;p style=&quot;color: red; font-weight: bold;&quot;&gt;
  3640. Sempre crie uma frase de segurança única para jogos, testnets ou airdrops e evite usar sua carteira principal.
  3641. &lt;/p&gt;
  3642. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 80%;&quot; /&gt;
  3643. &lt;br /&gt;
  3644. &lt;h2&gt;Ajuste Polinomial para Estimar PVK: Análise e Previsão com Python&lt;/h2&gt;
  3645.  
  3646. &lt;p&gt;Este artigo apresenta um exemplo prático de ajuste de curva polinomial utilizando Python para modelar e prever valores de uma sequência conhecida como PVK (Private Key Values) em função de índices numéricos. A análise é feita com bibliotecas populares como &lt;code&gt;numpy&lt;/code&gt;, &lt;code&gt;matplotlib&lt;/code&gt; e &lt;code&gt;scipy&lt;/code&gt;, fundamentais para trabalhos em ciência de dados e modelagem matemática.&lt;/p&gt;
  3647.  
  3648. &lt;h3&gt;Contextualização dos Dados&lt;/h3&gt;
  3649. &lt;p&gt;Temos uma série de valores de PVK para índices inteiros de 1 a 15, que representam uma sequência numérica derivada de algum processo ou experimento. O objetivo é ajustar um modelo matemático que possa prever os valores para índices futuros com boa aproximação.&lt;/p&gt;
  3650.  
  3651. &lt;h3&gt;Configuração dos Dados&lt;/h3&gt;
  3652. &lt;ul&gt;
  3653.  &lt;li&gt;&lt;strong&gt;Índices (n):&lt;/strong&gt; valores inteiros sequenciais de 1 a 15;&lt;/li&gt;
  3654.  &lt;li&gt;&lt;strong&gt;Valores PVK(n):&lt;/strong&gt; valores associados a cada índice, fornecidos para análise;&lt;/li&gt;
  3655. &lt;/ul&gt;
  3656.  
  3657. &lt;h3&gt;Modelo Matemático Utilizado&lt;/h3&gt;
  3658. &lt;p&gt;Utilizamos uma função polinomial de grau 3, expressa pela fórmula:&lt;/p&gt;
  3659. &lt;p&gt;&lt;em&gt;PVK(n) = a·n³ + b·n² + c·n + d&lt;/em&gt;&lt;/p&gt;
  3660. &lt;p&gt;onde &lt;em&gt;a, b, c, d&lt;/em&gt; são parâmetros ajustados para minimizar a diferença entre os valores reais e os previstos pelo modelo.&lt;/p&gt;
  3661.  
  3662. &lt;h3&gt;Implementação em Python&lt;/h3&gt;
  3663. &lt;p&gt;O script usa a função &lt;code&gt;curve_fit&lt;/code&gt; da biblioteca &lt;code&gt;scipy.optimize&lt;/code&gt; para encontrar os coeficientes ideais do polinômio. A seguir, gera-se uma previsão para índices de 1 a 20 e o gráfico ilustra os dados reais contra os valores estimados.&lt;/p&gt;
  3664.  
  3665. &lt;pre&gt;&lt;code&gt;import numpy as np
  3666. import matplotlib.pyplot as plt
  3667. from scipy.optimize import curve_fit
  3668.  
  3669. # Índices e valores conhecidos de PVK
  3670. indices = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])
  3671. pvks = np.array([1, 3, 7, 8, 21, 49, 76, 224, 467, 514, 1155, 2683, 5216, 10544, 26867])
  3672.  
  3673. # Função polinomial de grau 3 para ajuste
  3674. def poly3(x, a, b, c, d):
  3675.    return a*x**3 + b*x**2 + c*x + d
  3676.  
  3677. # Ajuste dos parâmetros do polinômio
  3678. params, _ = curve_fit(poly3, indices, pvks)
  3679.  
  3680. # Predição dos valores para índices de 1 a 20
  3681. indices_pred = np.arange(1, 21)
  3682. pvks_pred = poly3(indices_pred, *params)
  3683.  
  3684. # Plotagem dos dados reais e ajustados
  3685. plt.figure(figsize=(10, 6))
  3686. plt.plot(indices, pvks, &#39;bo&#39;, label=&#39;PVK reais&#39;)
  3687. plt.plot(indices_pred, pvks_pred, &#39;r-&#39;, label=&#39;Ajuste polinomial grau 3&#39;)
  3688. plt.xlabel(&#39;Índice (n)&#39;)
  3689. plt.ylabel(&#39;PVK(n)&#39;)
  3690. plt.title(&#39;Estimativa de PVK(n) com ajuste polinomial (grau 3)&#39;)
  3691. plt.legend()
  3692. plt.grid(True)
  3693. plt.tight_layout()
  3694. plt.show()
  3695.  
  3696. # Estimativa do valor para índice 16
  3697. pvk_16_est = poly3(16, *params)
  3698. print(f&#39;PVK estimado para o índice 16: {int(pvk_16_est)}&#39;)
  3699. &lt;/code&gt;&lt;/pre&gt;
  3700.  
  3701. &lt;h3&gt;Análise dos Resultados&lt;/h3&gt;
  3702. &lt;p&gt;O gráfico evidencia como o polinômio de grau 3 consegue acompanhar a tendência crescente da série PVK, prevendo valores futuros com razoável precisão, como o índice 16 estimado.&lt;/p&gt;
  3703.  
  3704. &lt;p&gt;Esse tipo de modelagem é bastante útil para dados que apresentam crescimento não linear, e o ajuste polinomial é uma técnica comum para séries temporais, análise econômica, engenharia, entre outras áreas.&lt;/p&gt;
  3705.  
  3706. &lt;h3&gt;Recomendações&lt;/h3&gt;
  3707. &lt;ul&gt;
  3708.  &lt;li&gt;Para garantir previsões robustas, é recomendável avaliar outros modelos e validar com dados independentes;&lt;/li&gt;
  3709.  &lt;li&gt;Considere também métricas quantitativas como R² e erro médio para análise da qualidade do ajuste;&lt;/li&gt;
  3710.  &lt;li&gt;Entenda o contexto dos dados para escolher o grau do polinômio ou outro modelo adequado.&lt;/li&gt;
  3711. &lt;/ul&gt;
  3712.  
  3713. &lt;h3&gt;Bibliotecas Oficiais e Referências&lt;/h3&gt;
  3714. &lt;ul&gt;
  3715.  &lt;li&gt;&lt;a href=&quot;https://numpy.org/&quot; title=&quot;Site oficial do NumPy&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;NumPy - Biblioteca para computação científica em Python&lt;/a&gt;&lt;/li&gt;
  3716.  &lt;li&gt;&lt;a href=&quot;https://matplotlib.org/&quot; title=&quot;Site oficial do Matplotlib&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;Matplotlib - Biblioteca para criação de gráficos em Python&lt;/a&gt;&lt;/li&gt;
  3717.  &lt;li&gt;&lt;a href=&quot;https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html&quot; title=&quot;Documentação curve_fit SciPy&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;SciPy curve_fit - Ajuste de curvas&lt;/a&gt;&lt;/li&gt;
  3718. &lt;/ul&gt;
  3719.  
  3720. &lt;h3&gt;Conclusão&lt;/h3&gt;
  3721. &lt;p&gt;O uso do ajuste polinomial de grau 3 mostra-se eficiente para modelar a série PVK e permite a previsão de valores futuros. A aplicação de ferramentas Python robustas oferece um caminho acessível para análise e visualização desses dados.&lt;/p&gt;
  3722.  
  3723. &lt;p&gt;&lt;strong&gt;Importante:&lt;/strong&gt; Sempre realize análises adicionais e verifique a adequação do modelo ao contexto dos dados para garantir previsões confiáveis e tomar decisões informadas.&lt;/p&gt;
  3724. &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;div style=&quot;text-align:center;margin:15px 0;padding:10px;background-color:#f4f4f4;border-radius:8px;&quot;&gt;
  3725.   &lt;a href=&quot;https://www.youtube.com/@canalQb&quot; style=&quot;font-size:18px;font-weight:bold;text-decoration:none;color:#1a73e8;padding:8px 16px;border:2px solid #1a73e8;border-radius:5px;transition:all 0.3s ease;&quot;&gt;
  3726.      Clique aqui para visitar o CanalQb no YouTube
  3727.   &lt;/a&gt;
  3728. &lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://canalqb.blogspot.com/feeds/7956548430127367939/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://canalqb.blogspot.com/2025/06/ajuste-polinomial-para-estimar-pvk.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/7956548430127367939'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/7956548430127367939'/><link rel='alternate' type='text/html' href='https://canalqb.blogspot.com/2025/06/ajuste-polinomial-para-estimar-pvk.html' title='Ajuste Polinomial para Estimar PVK: Análise e Previsão com Python'/><author><name>CanalQb</name><uri>http://www.blogger.com/profile/12641039126796028340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtt2Q0QwGuJ3OI0G29twmGKYmZvab5d8AV6fJd_HUdevW7fofyH2lDRAv39LAtg0A2x46Im5VwUT-1cfm0b4g7jgY9IKC_BbqqEV9bew_OhkddtGzaFlM4uL0LUeqS8nxK83Yufp3E6SOycslOyDA6O14vPpHRiPkTCSbb5H05NTE/s220/1QB.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s72-c/CanalQb.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5982274115355506187.post-2584904620480323553</id><published>2025-06-30T15:18:00.004-03:00</published><updated>2025-07-31T12:54:12.401-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Blockchain"/><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><title type='text'>Gerando Chaves Privadas BIP32 a partir de Frases Mnemônicas BIP39 com Python</title><content type='html'>&lt;!--Linha de separação superior--&gt;
  3729. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  3730.  
  3731. &lt;!--Link para o canal YouTube--&gt;
  3732. &lt;p style=&quot;text-align: center;&quot;&gt;
  3733.  &lt;a href=&quot;https://www.youtube.com/channel/UCdOA_1KzXHIp3gmVyyYv2sg&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot; title=&quot;Visite o @CanalQb no YouTube&quot;&gt;
  3734.    &lt;span style=&quot;font-size: 1.2em; font-weight: bold;&quot;&gt;@CanalQb no YouTube&lt;/span&gt;
  3735.  &lt;/a&gt;
  3736. &lt;/p&gt;
  3737.  
  3738. &lt;!--Linha de separação inferior--&gt;
  3739. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  3740.  
  3741. &lt;!--Imagem do canal--&gt;
  3742. &lt;div style=&quot;margin: 20px 0px; text-align: center;&quot;&gt;
  3743.  &lt;img alt=&quot;@CanalQb&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s2560/CanalQb.png&quot; style=&quot;border-radius: 10px; height: auto; max-width: 100%;&quot; /&gt;
  3744. &lt;/div&gt;
  3745.  
  3746. &lt;h2 style=&quot;text-align: center;&quot;&gt;Gerando Chaves Privadas BIP32 a partir de Frases Mnemônicas BIP39 com Python&lt;/h2&gt;
  3747.  
  3748. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  3749.  
  3750. &lt;!--Vídeo incorporado--&gt;
  3751. &lt;div style=&quot;margin-bottom: 30px; text-align: center;&quot;&gt;
  3752.  &lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; height=&quot;450&quot; loading=&quot;lazy&quot; src=&quot;https://www.youtube.com/embed/g1dFzkx_SJA?autoplay=1&amp;amp;mute=1&amp;amp;origin=https://canalqb.blogspot.com/&amp;amp;controls=1&amp;amp;rel=0&amp;amp;enablejsapi=1&amp;amp;cc_load_policy=1&quot; title=&quot;Vídeo do @CanalQb&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;
  3753. &lt;/div&gt;
  3754. &lt;p style=&quot;color: red; font-weight: bold;&quot;&gt;
  3755. Sempre crie uma frase de segurança única para jogos, testnets ou airdrops e evite usar sua carteira principal.
  3756. &lt;/p&gt;
  3757. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 80%;&quot; /&gt;
  3758. &lt;br /&gt;
  3759. &lt;h2&gt;Gerando Chaves Privadas BIP32 a partir de Frases Mnemônicas BIP39 com Python&lt;/h2&gt;
  3760.  
  3761. &lt;p&gt;Neste artigo, você aprenderá a utilizar Python para gerar chaves privadas BIP32 a partir de frases mnemônicas no padrão BIP39. Essa técnica é fundamental no universo das criptomoedas para derivar chaves seguras e determinísticas a partir de uma sequência de palavras fáceis de lembrar.&lt;/p&gt;
  3762.  
  3763. &lt;h3&gt;O que são BIP39 e BIP32?&lt;/h3&gt;
  3764. &lt;p&gt;&lt;strong&gt;BIP39&lt;/strong&gt; é o padrão para criação de frases mnemônicas — listas de palavras — usadas para criar seeds criptográficas que geram carteiras seguras. Já o &lt;strong&gt;BIP32&lt;/strong&gt; especifica a geração hierárquica determinística de chaves privadas e públicas, facilitando o gerenciamento de múltiplas carteiras a partir de uma única seed.&lt;/p&gt;
  3765.  
  3766. &lt;p&gt;Ambos são padrões amplamente adotados por carteiras de criptomoedas como Ledger, Trezor, Trust Wallet, entre outras.&lt;/p&gt;
  3767.  
  3768. &lt;h3&gt;Bibliotecas Python utilizadas&lt;/h3&gt;
  3769. &lt;ul&gt;
  3770.  &lt;li&gt;&lt;a href=&quot;https://github.com/trezor/python-mnemonic&quot; title=&quot;Repositório oficial python-mnemonic no GitHub&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;python-mnemonic&lt;/a&gt;: para manipulação de frases BIP39 e geração de seeds;&lt;/li&gt;
  3771.  &lt;li&gt;&lt;a href=&quot;https://github.com/prusnak/bip32utils&quot; title=&quot;Repositório bip32utils no GitHub&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;bip32utils&lt;/a&gt;: para derivar chaves privadas e públicas segundo BIP32.&lt;/li&gt;
  3772. &lt;/ul&gt;
  3773.  
  3774. &lt;h3&gt;Como funciona o código&lt;/h3&gt;
  3775. &lt;p&gt;O script abaixo faz o seguinte:&lt;/p&gt;
  3776. &lt;ol&gt;
  3777.  &lt;li&gt;Define uma frase mnemônica BIP39 de 24 palavras (exemplo com a palavra final “diesel”)&lt;/li&gt;
  3778.  &lt;li&gt;Utiliza a biblioteca &lt;code&gt;mnemonic&lt;/code&gt; para gerar a seed binária associada&lt;/li&gt;
  3779.  &lt;li&gt;Deriva a chave privada raiz BIP32 a partir dessa seed usando &lt;code&gt;bip32utils&lt;/code&gt;&lt;/li&gt;
  3780.  &lt;li&gt;Exibe a chave privada em formato hexadecimal&lt;/li&gt;
  3781. &lt;/ol&gt;
  3782.  
  3783. &lt;h3&gt;Script completo para gerar chave privada BIP32&lt;/h3&gt;
  3784. &lt;pre&gt;&lt;code&gt;from mnemonic import Mnemonic
  3785. from bip32utils import BIP32Key
  3786.  
  3787. # Frase mnemônica de 24 palavras, exemplo com 23 &#39;abandon&#39; e a última &#39;diesel&#39;
  3788. mnemonic_phrase = &quot;abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon diesel&quot;
  3789.  
  3790. # Criar objeto Mnemonic para idioma inglês
  3791. mnemo = Mnemonic(&quot;english&quot;)
  3792.  
  3793. # Gerar seed a partir da frase mnemônica (sem passphrase)
  3794. seed = mnemo.to_seed(mnemonic_phrase, passphrase=&quot;&quot;)
  3795.  
  3796. # Derivar a chave privada raiz BIP32 usando a seed
  3797. bip32_root_key = BIP32Key.fromEntropy(seed)
  3798.  
  3799. # Obter chave privada em bytes
  3800. private_key = bip32_root_key.PrivateKey()
  3801.  
  3802. # Exibir chave privada em hexadecimal
  3803. print(private_key.hex())
  3804. &lt;/code&gt;&lt;/pre&gt;
  3805.  
  3806. &lt;h3&gt;Observações importantes&lt;/h3&gt;
  3807. &lt;p&gt;O exemplo acima utiliza uma frase de exemplo, NÃO use essa frase para guardar criptomoedas reais, pois é pública e insegura. Sempre gere frases mnemônicas únicas e seguras para proteção de ativos.&lt;/p&gt;
  3808.  
  3809. &lt;p&gt;A derivação de chaves BIP32 permite criar carteiras determinísticas que podem gerar múltiplos endereços de forma segura e organizada, essencial para gestão de criptomoedas em ambientes profissionais e pessoais.&lt;/p&gt;
  3810.  
  3811. &lt;h3&gt;Referências oficiais&lt;/h3&gt;
  3812. &lt;ul&gt;
  3813.  &lt;li&gt;&lt;a href=&quot;https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki&quot; title=&quot;BIP39 - Mnemonic code for generating deterministic keys&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;BIP39 - Bitcoin Improvement Proposal&lt;/a&gt;&lt;/li&gt;
  3814.  &lt;li&gt;&lt;a href=&quot;https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki&quot; title=&quot;BIP32 - Hierarchical Deterministic Wallets&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;BIP32 - Bitcoin Improvement Proposal&lt;/a&gt;&lt;/li&gt;
  3815.  &lt;li&gt;&lt;a href=&quot;https://github.com/trezor/python-mnemonic&quot; title=&quot;Python Mnemonic Library - Trezor&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;python-mnemonic GitHub&lt;/a&gt;&lt;/li&gt;
  3816.  &lt;li&gt;&lt;a href=&quot;https://github.com/prusnak/bip32utils&quot; title=&quot;bip32utils GitHub&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;bip32utils GitHub&lt;/a&gt;&lt;/li&gt;
  3817. &lt;/ul&gt;
  3818.  
  3819. &lt;h3&gt;Conclusão&lt;/h3&gt;
  3820. &lt;p&gt;Gerar chaves privadas a partir de frases mnemônicas BIP39 é uma habilidade essencial para desenvolvedores e entusiastas de criptomoedas. O uso correto das bibliotecas Python apresentadas facilita a criação de carteiras seguras e a manipulação determinística das chaves, alinhada aos padrões mais adotados do mercado.&lt;/p&gt;
  3821.  
  3822. &lt;p&gt;&lt;strong&gt;Atenção:&lt;/strong&gt; sempre avalie cuidadosamente seus investimentos e segurança digital. Invista apenas o que compreende e utilize ferramentas reconhecidas para proteger seus ativos.&lt;/p&gt;
  3823. &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;div style=&quot;text-align:center;margin:15px 0;padding:10px;background-color:#f4f4f4;border-radius:8px;&quot;&gt;
  3824.   &lt;a href=&quot;https://www.youtube.com/@canalQb&quot; style=&quot;font-size:18px;font-weight:bold;text-decoration:none;color:#1a73e8;padding:8px 16px;border:2px solid #1a73e8;border-radius:5px;transition:all 0.3s ease;&quot;&gt;
  3825.      Clique aqui para visitar o CanalQb no YouTube
  3826.   &lt;/a&gt;
  3827. &lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://canalqb.blogspot.com/feeds/2584904620480323553/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://canalqb.blogspot.com/2025/06/gerando-chaves-privadas-bip32-partir-de.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/2584904620480323553'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/2584904620480323553'/><link rel='alternate' type='text/html' href='https://canalqb.blogspot.com/2025/06/gerando-chaves-privadas-bip32-partir-de.html' title='Gerando Chaves Privadas BIP32 a partir de Frases Mnemônicas BIP39 com Python'/><author><name>CanalQb</name><uri>http://www.blogger.com/profile/12641039126796028340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtt2Q0QwGuJ3OI0G29twmGKYmZvab5d8AV6fJd_HUdevW7fofyH2lDRAv39LAtg0A2x46Im5VwUT-1cfm0b4g7jgY9IKC_BbqqEV9bew_OhkddtGzaFlM4uL0LUeqS8nxK83Yufp3E6SOycslOyDA6O14vPpHRiPkTCSbb5H05NTE/s220/1QB.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s72-c/CanalQb.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5982274115355506187.post-3371263463655899910</id><published>2025-06-30T15:17:00.002-03:00</published><updated>2025-07-31T12:54:09.335-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Blockchain"/><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><title type='text'>Gerador de Combinações BIP39 com Python e Mnemonic</title><content type='html'>&lt;!--Linha de separação superior--&gt;
  3828. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  3829.  
  3830. &lt;!--Link para o canal YouTube--&gt;
  3831. &lt;p style=&quot;text-align: center;&quot;&gt;
  3832.  &lt;a href=&quot;https://www.youtube.com/channel/UCdOA_1KzXHIp3gmVyyYv2sg&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot; title=&quot;Visite o @CanalQb no YouTube&quot;&gt;
  3833.    &lt;span style=&quot;font-size: 1.2em; font-weight: bold;&quot;&gt;@CanalQb no YouTube&lt;/span&gt;
  3834.  &lt;/a&gt;
  3835. &lt;/p&gt;
  3836.  
  3837. &lt;!--Linha de separação inferior--&gt;
  3838. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  3839.  
  3840. &lt;!--Imagem do canal--&gt;
  3841. &lt;div style=&quot;margin: 20px 0px; text-align: center;&quot;&gt;
  3842.  &lt;img alt=&quot;@CanalQb&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s2560/CanalQb.png&quot; style=&quot;border-radius: 10px; height: auto; max-width: 100%;&quot; /&gt;
  3843. &lt;/div&gt;
  3844.  
  3845. &lt;h2 style=&quot;text-align: center;&quot;&gt;Gerador de Combinações BIP39 com Python e Mnemonic&lt;/h2&gt;
  3846.  
  3847. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 95%;&quot; /&gt;
  3848.  
  3849. &lt;!--Vídeo incorporado--&gt;
  3850. &lt;div style=&quot;margin-bottom: 30px; text-align: center;&quot;&gt;
  3851.  &lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; height=&quot;450&quot; loading=&quot;lazy&quot; src=&quot;https://www.youtube.com/embed/g1dFzkx_SJA?autoplay=1&amp;amp;mute=1&amp;amp;origin=https://canalqb.blogspot.com/&amp;amp;controls=1&amp;amp;rel=0&amp;amp;enablejsapi=1&amp;amp;cc_load_policy=1&quot; title=&quot;Vídeo do @CanalQb&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;
  3852. &lt;/div&gt;
  3853. &lt;p style=&quot;color: red; font-weight: bold;&quot;&gt;
  3854. Sempre crie uma frase de segurança única para jogos, testnets ou airdrops e evite usar sua carteira principal.
  3855. &lt;/p&gt;
  3856. &lt;hr style=&quot;border: 0.5px solid rgb(204, 204, 204); margin: 10px auto; width: 80%;&quot; /&gt;
  3857. &lt;br /&gt;
  3858. &lt;h2&gt;Gerador de Combinações BIP39 com Python e Mnemonic&lt;/h2&gt;
  3859.  
  3860. &lt;p&gt;Este artigo apresenta um script em Python para geração de combinações de palavras da lista BIP39 utilizando a biblioteca &lt;code&gt;mnemonic&lt;/code&gt;. A proposta é testar diferentes combinações de frases mnemônicas e validar se são consideradas legítimas de acordo com o padrão do Bitcoin Improvement Proposal 39 (BIP39).&lt;/p&gt;
  3861.  
  3862. &lt;h3&gt;O que é BIP39?&lt;/h3&gt;
  3863. &lt;p&gt;O BIP39 é um padrão utilizado por carteiras de criptomoedas para converter uma sequência de palavras mnemônicas em uma seed criptográfica. Esse padrão é amplamente usado por carteiras como Ledger, Trezor, Trust Wallet, entre outras. Uma frase BIP39 típica pode conter 12, 18 ou 24 palavras da lista oficial do protocolo.&lt;/p&gt;
  3864.  
  3865. &lt;p&gt;A lista oficial de palavras pode ser consultada no &lt;a href=&quot;https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt&quot; title=&quot;Lista oficial de palavras BIP39 no GitHub&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;repositório oficial no GitHub&lt;/a&gt;.&lt;/p&gt;
  3866.  
  3867. &lt;h3&gt;Objetivo do Script&lt;/h3&gt;
  3868. &lt;p&gt;O script tem como função combinar as 24 primeiras palavras da lista BIP39 (como exemplo) e formar frases de 24 palavras, utilizando:&lt;/p&gt;
  3869. &lt;ul&gt;
  3870.  &lt;li&gt;16 palavras fixas “abandon”&lt;/li&gt;
  3871.  &lt;li&gt;1 palavra fixa “length”&lt;/li&gt;
  3872.  &lt;li&gt;7 palavras permutadas sem repetição das 24 primeiras do dicionário&lt;/li&gt;
  3873. &lt;/ul&gt;
  3874.  
  3875. &lt;h3&gt;Como funciona o script&lt;/h3&gt;
  3876. &lt;p&gt;O script segue as etapas abaixo:&lt;/p&gt;
  3877. &lt;ol&gt;
  3878.  &lt;li&gt;Importa a biblioteca &lt;code&gt;mnemonic&lt;/code&gt; e a função &lt;code&gt;permutations&lt;/code&gt; do módulo &lt;code&gt;itertools&lt;/code&gt;&lt;/li&gt;
  3879.  &lt;li&gt;Define as palavras fixas (início da frase)&lt;/li&gt;
  3880.  &lt;li&gt;Permuta as 7 palavras restantes&lt;/li&gt;
  3881.  &lt;li&gt;Concatena as 16 palavras fixas + “length” + 7 permutadas&lt;/li&gt;
  3882.  &lt;li&gt;Valida se a frase final é uma frase BIP39 válida usando &lt;code&gt;mnemo.check()&lt;/code&gt;&lt;/li&gt;
  3883.  &lt;li&gt;Salva o progresso a cada 1000 iterações no arquivo &lt;code&gt;indice_salvo.txt&lt;/code&gt;&lt;/li&gt;
  3884. &lt;/ol&gt;
  3885.  
  3886. &lt;h3&gt;Trecho principal do código&lt;/h3&gt;
  3887. &lt;pre&gt;&lt;code&gt;import itertools
  3888. from mnemonic import Mnemonic
  3889.  
  3890. def gerar_combinacoes_bip39():
  3891.    mnemo = Mnemonic(&quot;english&quot;)
  3892.    palavras = mnemo.wordlist[:24]
  3893.    palavras_iniciais = [&quot;abandon&quot;] * 16 + [&quot;length&quot;]
  3894.    combinacoes_restantes = itertools.permutations(palavras, 7)
  3895.  
  3896.    try:
  3897.        with open(&quot;indice_salvo.txt&quot;, &quot;r&quot;) as file:
  3898.            indice_salvo = int(file.readline().strip())
  3899.    except FileNotFoundError:
  3900.        indice_salvo = 0
  3901.  
  3902.    for j, combinacao in enumerate(itertools.islice(combinacoes_restantes, indice_salvo, None), start=indice_salvo):
  3903.        frase_completa = &quot; &quot;.join(palavras_iniciais + list(combinacao))
  3904.        if mnemo.check(frase_completa):
  3905.            print(f&quot;Índice: {j + 1}, Frase válida: {frase_completa}&quot;)
  3906.        if (j + 1) % 1000 == 0:
  3907.            with open(&quot;indice_salvo.txt&quot;, &quot;w&quot;) as file:
  3908.                file.write(str(j + 1))
  3909.  
  3910. gerar_combinacoes_bip39()
  3911. &lt;/code&gt;&lt;/pre&gt;
  3912.  
  3913. &lt;h3&gt;Validação com segurança&lt;/h3&gt;
  3914. &lt;p&gt;A biblioteca &lt;code&gt;mnemonic&lt;/code&gt;, mantida pela &lt;a href=&quot;https://github.com/trezor/python-mnemonic&quot; title=&quot;Repositório oficial Trezor Python Mnemonic&quot; rel=&quot;nofollow noopener&quot; target=&quot;_blank&quot;&gt;Trezor no GitHub&lt;/a&gt;, oferece suporte nativo para validar frases completas segundo as regras do BIP39. Isso é crucial para evitar que frases inválidas sejam usadas em ambientes críticos.&lt;/p&gt;
  3915.  
  3916. &lt;h3&gt;Limitações e performance&lt;/h3&gt;
  3917. &lt;p&gt;Como o número de combinações possíveis de 7 palavras entre 24 é extremamente grande (acima de 4 milhões), esse script é apenas uma demonstração educacional. Para grandes volumes, é recomendável usar otimizações como multiprocessing ou computação distribuída.&lt;/p&gt;
  3918.  
  3919. &lt;h3&gt;Importante!&lt;/h3&gt;
  3920. &lt;p&gt;Este conteúdo é técnico e educativo. Não utilize este script para tentar recuperar carteiras ou acessar chaves privadas sem autorização. O uso indevido de ferramentas criptográficas pode violar termos legais e éticos.&lt;/p&gt;
  3921.  
  3922. &lt;h3&gt;Exemplo de frase válida&lt;/h3&gt;
  3923. &lt;p&gt;Uma frase BIP39 válida pode ser algo como:&lt;/p&gt;
  3924. &lt;pre&gt;&lt;code&gt;abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon length bulb cage adult pilot limb detail lunar gun custom erupt&lt;/code&gt;&lt;/pre&gt;
  3925.  
  3926. &lt;p&gt;Note que a frase acima não é segura para uso real e foi gerada apenas como exemplo ilustrativo.&lt;/p&gt;
  3927. &lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;div style=&quot;text-align:center;margin:15px 0;padding:10px;background-color:#f4f4f4;border-radius:8px;&quot;&gt;
  3928.   &lt;a href=&quot;https://www.youtube.com/@canalQb&quot; style=&quot;font-size:18px;font-weight:bold;text-decoration:none;color:#1a73e8;padding:8px 16px;border:2px solid #1a73e8;border-radius:5px;transition:all 0.3s ease;&quot;&gt;
  3929.      Clique aqui para visitar o CanalQb no YouTube
  3930.   &lt;/a&gt;
  3931. &lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://canalqb.blogspot.com/feeds/3371263463655899910/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='https://canalqb.blogspot.com/2025/06/gerador-de-combinacoes-bip39-com-python.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/3371263463655899910'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/5982274115355506187/posts/default/3371263463655899910'/><link rel='alternate' type='text/html' href='https://canalqb.blogspot.com/2025/06/gerador-de-combinacoes-bip39-com-python.html' title='Gerador de Combinações BIP39 com Python e Mnemonic'/><author><name>CanalQb</name><uri>http://www.blogger.com/profile/12641039126796028340</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtt2Q0QwGuJ3OI0G29twmGKYmZvab5d8AV6fJd_HUdevW7fofyH2lDRAv39LAtg0A2x46Im5VwUT-1cfm0b4g7jgY9IKC_BbqqEV9bew_OhkddtGzaFlM4uL0LUeqS8nxK83Yufp3E6SOycslOyDA6O14vPpHRiPkTCSbb5H05NTE/s220/1QB.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAppgdjbwBxn27tGUch6DJBXRrlOAwk1V0ZTtHvEvlt0HoVsARJSfJDizdDRlmkLwKSxSRzbknK5L3jVKs364oRzgozNeD0Vv2aky1vk2QzrJh-O_sgDQEUXJxw5XHtmFNsmI5iv_ITOJcDfW7k6XtoTE9RgJiKZDW6ZTK41oAjDh7smDJMTC9E1h4YOfm/s72-c/CanalQb.png" height="72" width="72"/><thr:total>0</thr:total></entry></feed>

If you would like to create a banner that links to this page (i.e. this validation result), do the following:

  1. Download the "valid Atom 1.0" banner.

  2. Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)

  3. Add this HTML to your page (change the image src attribute if necessary):

If you would like to create a text link instead, here is the URL you can use:

http://www.feedvalidator.org/check.cgi?url=https%3A//canalqb.blogspot.com/atom.xml

Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda