[{"data":1,"prerenderedAt":916},["ShallowReactive",2],{"navigation_docs":3,"-projetos-integradores-pi-02-gerador-senhas-readme":252,"-projetos-integradores-pi-02-gerador-senhas-readme-surround":913},[4,96,189],{"title":5,"icon":6,"path":7,"stem":8,"children":9},"⚙️ Engenharia de Software","i-lucide-book-open","\u002Fengenharia-software","1.engenharia-software",[10,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92],{"title":5,"path":7,"stem":11},"1.engenharia-software\u002Findex",{"title":13,"path":14,"stem":15},"📋 Plano de Ensino e Aplicações","\u002Fengenharia-software\u002Fengenharia-software-aplicacoes","1.engenharia-software\u002F01.engenharia-software-aplicacoes",{"title":17,"path":18,"stem":19},"Cap 01: Introdução e Natureza do Software","\u002Fengenharia-software\u002Fcap-01","1.engenharia-software\u002F02.cap-01",{"title":21,"path":22,"stem":23},"Cap 02: Modelos de Processo de Software","\u002Fengenharia-software\u002Fcap-02","1.engenharia-software\u002F03.cap-02",{"title":25,"path":26,"stem":27},"Cap 03: As Atividades do Processo","\u002Fengenharia-software\u002Fcap-03","1.engenharia-software\u002F04.cap-03",{"title":29,"path":30,"stem":31},"Cap 04: Metodologias Ágeis","\u002Fengenharia-software\u002Fcap-04","1.engenharia-software\u002F05.cap-04",{"title":33,"path":34,"stem":35},"Cap 05: Fundamentos de Requisitos","\u002Fengenharia-software\u002Fcap-05","1.engenharia-software\u002F06.cap-05",{"title":37,"path":38,"stem":39},"Cap 06: Elicitação e Levantamento","\u002Fengenharia-software\u002Fcap-06","1.engenharia-software\u002F07.cap-06",{"title":41,"path":42,"stem":43},"Cap 07: Especificação de Requisitos (ERS)","\u002Fengenharia-software\u002Fcap-07","1.engenharia-software\u002F08.cap-07",{"title":45,"path":46,"stem":47},"Cap 08: Validação e Gestão","\u002Fengenharia-software\u002Fcap-08","1.engenharia-software\u002F09.cap-08",{"title":49,"path":50,"stem":51},"Cap 09: Fundamentos da Modelagem","\u002Fengenharia-software\u002Fcap-09","1.engenharia-software\u002F10.cap-09",{"title":53,"path":54,"stem":55},"Cap 10: Diagrama de Casos de Uso (Conceitos)","\u002Fengenharia-software\u002Fcap-10","1.engenharia-software\u002F11.cap-10",{"title":57,"path":58,"stem":59},"Cap 11: Casos de Uso (Prática e Relações)","\u002Fengenharia-software\u002Fcap-11","1.engenharia-software\u002F12.cap-11",{"title":61,"path":62,"stem":63},"Cap 12: Diagrama de Classes (Conceitos)","\u002Fengenharia-software\u002Fcap-12","1.engenharia-software\u002F13.cap-12",{"title":65,"path":66,"stem":67},"Cap 13: Herança e Polimorfismo","\u002Fengenharia-software\u002Fcap-13","1.engenharia-software\u002F14.cap-13",{"title":69,"path":70,"stem":71},"Cap 14: Diagrama de Sequência","\u002Fengenharia-software\u002Fcap-14","1.engenharia-software\u002F15.cap-14",{"title":73,"path":74,"stem":75},"Cap 15: Diagramas Dinâmicos (Estados e Atividades)","\u002Fengenharia-software\u002Fcap-15","1.engenharia-software\u002F16.cap-15",{"title":77,"path":78,"stem":79},"Cap 16: Qualidade de Software (SQA)","\u002Fengenharia-software\u002Fcap-16","1.engenharia-software\u002F17.cap-16",{"title":81,"path":82,"stem":83},"Cap 17: Estratégias de Teste","\u002Fengenharia-software\u002Fcap-17","1.engenharia-software\u002F18.cap-17",{"title":85,"path":86,"stem":87},"Cap 18: Manutenção e Evolução","\u002Fengenharia-software\u002Fcap-18","1.engenharia-software\u002F19.cap-18",{"title":89,"path":90,"stem":91},"Cap 19: Gerência de Configuração (SCM)","\u002Fengenharia-software\u002Fcap-19","1.engenharia-software\u002F20.cap-19",{"title":93,"path":94,"stem":95},"Cap 20: Conclusão e Próximos Passos","\u002Fengenharia-software\u002Fcap-20","1.engenharia-software\u002F21.cap-20",{"title":97,"icon":98,"path":99,"stem":100,"children":101},"🛠️ Atividades","i-lucide-wrench","\u002Fatividades","2.atividades",[102,105,109,113,117,121,125,129,133,137,141,145,149,153,157,161,165,169,173,177,181,185],{"title":103,"path":99,"stem":104},"📋 Orientações Gerais","2.atividades\u002Findex",{"title":106,"path":107,"stem":108},"📅 Cronograma","\u002Fatividades\u002Fcronograma","2.atividades\u002F01.cronograma",{"title":110,"path":111,"stem":112},"✏️ Atividade 01: Escopo e Personas","\u002Fatividades\u002Fatv-01-escopo","2.atividades\u002F02.atv-01-escopo",{"title":114,"path":115,"stem":116},"⚙️ Atividade 02: Processos de Software","\u002Fatividades\u002Fatv-02-processos","2.atividades\u002F03.atv-02-processos",{"title":118,"path":119,"stem":120},"📋 Atividade 03: Engenharia de Requisitos","\u002Fatividades\u002Fatv-03-requisitos","2.atividades\u002F04.atv-03-requisitos",{"title":122,"path":123,"stem":124},"📝 Atividade 04: User Stories e Backlog","\u002Fatividades\u002Fatv-04-backlog","2.atividades\u002F05.atv-04-backlog",{"title":126,"path":127,"stem":128},"🎭 Atividade 05: Casos de Uso (UML)","\u002Fatividades\u002Fatv-05-casos-uso","2.atividades\u002F06.atv-05-casos-uso",{"title":130,"path":131,"stem":132},"🖼️ Atividade 06: Prototipagem e Wireframes","\u002Fatividades\u002Fatv-06-prototipagem","2.atividades\u002F07.atv-06-prototipagem",{"title":134,"path":135,"stem":136},"🏛️ Atividade 07: Diagrama de Classes (UML)","\u002Fatividades\u002Fatv-07-classes","2.atividades\u002F08.atv-07-classes",{"title":138,"path":139,"stem":140},"🔀 Atividade 08: Diagrama de Sequência (UML)","\u002Fatividades\u002Fatv-08-sequencia","2.atividades\u002F09.atv-08-sequencia",{"title":142,"path":143,"stem":144},"🧪 Atividade 09: Qualidade e Testes","\u002Fatividades\u002Fatv-09-testes","2.atividades\u002F10.atv-09-testes",{"title":146,"path":147,"stem":148},"🏁 Atividade 10: Projeto Integrador Final","\u002Fatividades\u002Fatv-10-projeto-final","2.atividades\u002F11.atv-10-projeto-final",{"title":150,"path":151,"stem":152},"📊 Atividade 11: Diagrama de Atividades (UML)","\u002Fatividades\u002Fatv-11-atividades","2.atividades\u002F12.atv-11-atividades",{"title":154,"path":155,"stem":156},"🔄 Atividade 12: Diagrama de Transição de Estados (UML)","\u002Fatividades\u002Fatv-12-estados","2.atividades\u002F13.atv-12-estados",{"title":158,"path":159,"stem":160},"🏗️ Atividade 13: Arquitetura de Software e Padrões","\u002Fatividades\u002Fatv-13-arquitetura","2.atividades\u002F14.atv-13-arquitetura",{"title":162,"path":163,"stem":164},"🌐 Atividade 14: Modelagem de APIs REST e Swagger","\u002Fatividades\u002Fatv-14-apis-swagger","2.atividades\u002F15.atv-14-apis-swagger",{"title":166,"path":167,"stem":168},"🌿 Atividade 15: GitFlow e Trabalho Colaborativo","\u002Fatividades\u002Fatv-15-gitflow-colaboracao","2.atividades\u002F16.atv-15-gitflow-colaboracao",{"title":170,"path":171,"stem":172},"🚀 Atividade 16: Pipelines de CI\u002FCD com GitHub Actions","\u002Fatividades\u002Fatv-16-pipelines-cicd","2.atividades\u002F17.atv-16-pipelines-cicd",{"title":174,"path":175,"stem":176},"🐳 Atividade 17: Containerização de Ambientes com Docker","\u002Fatividades\u002Fatv-17-conteineres-docker","2.atividades\u002F18.atv-17-conteineres-docker",{"title":178,"path":179,"stem":180},"🔒 Atividade 18: Segurança no Desenvolvimento e OWASP","\u002Fatividades\u002Fatv-18-seguranca-devsecops","2.atividades\u002F19.atv-18-seguranca-devsecops",{"title":182,"path":183,"stem":184},"📈 Atividade 19: Métricas de Software, Estimativas e DORA","\u002Fatividades\u002Fatv-19-metricas-estimativas","2.atividades\u002F20.atv-19-metricas-estimativas",{"title":186,"path":187,"stem":188},"🏆 Atividade 20: Projeto Final Avançado (Fase 2)","\u002Fatividades\u002Fatv-20-projeto-final-avancado","2.atividades\u002F21.atv-20-projeto-final-avancado",{"title":190,"icon":191,"path":192,"stem":193,"children":194},"🖼️ Galeria de Projetos Integradores","i-lucide-image","\u002Fprojetos-integradores","3.projetos-integradores",[195,197,207,216,225,234,243],{"title":190,"path":192,"stem":196},"3.projetos-integradores\u002Findex",{"title":198,"path":199,"stem":200,"children":201},"🅿️ Projeto 01: Gestão de Estacionamentos","\u002Fprojetos-integradores\u002Fpi-01-gestao-estacionamentos","3.projetos-integradores\u002F01.pi-01-gestao-estacionamentos\u002Findex",[202,203],{"title":198,"path":199,"stem":200},{"title":204,"path":205,"stem":206},"README","\u002Fprojetos-integradores\u002Fpi-01-gestao-estacionamentos\u002Freadme","3.projetos-integradores\u002F01.pi-01-gestao-estacionamentos\u002F2.readme",{"title":208,"path":209,"stem":210,"children":211},"🔐 Projeto 02: Gerador de Senhas","\u002Fprojetos-integradores\u002Fpi-02-gerador-senhas","3.projetos-integradores\u002F02.pi-02-gerador-senhas\u002Findex",[212,213],{"title":208,"path":209,"stem":210},{"title":204,"path":214,"stem":215},"\u002Fprojetos-integradores\u002Fpi-02-gerador-senhas\u002Freadme","3.projetos-integradores\u002F02.pi-02-gerador-senhas\u002F2.readme",{"title":217,"path":218,"stem":219,"children":220},"🍣 Projeto 03: Pedidos Restaurante","\u002Fprojetos-integradores\u002Fpi-03-pedidos-restaurante","3.projetos-integradores\u002F03.pi-03-pedidos-restaurante\u002Findex",[221,222],{"title":217,"path":218,"stem":219},{"title":204,"path":223,"stem":224},"\u002Fprojetos-integradores\u002Fpi-03-pedidos-restaurante\u002Freadme","3.projetos-integradores\u002F03.pi-03-pedidos-restaurante\u002F2.readme",{"title":226,"path":227,"stem":228,"children":229},"📱 Projeto 04: Empréstimos Dispositivos","\u002Fprojetos-integradores\u002Fpi-04-emprestimos-dispositivos","3.projetos-integradores\u002F04.pi-04-emprestimos-dispositivos\u002Findex",[230,231],{"title":226,"path":227,"stem":228},{"title":204,"path":232,"stem":233},"\u002Fprojetos-integradores\u002Fpi-04-emprestimos-dispositivos\u002Freadme","3.projetos-integradores\u002F04.pi-04-emprestimos-dispositivos\u002F2.readme",{"title":235,"path":236,"stem":237,"children":238},"📦 Projeto 05: Gestão de Estoque","\u002Fprojetos-integradores\u002Fpi-05-gestao-estoque","3.projetos-integradores\u002F05.pi-05-gestao-estoque\u002Findex",[239,240],{"title":235,"path":236,"stem":237},{"title":204,"path":241,"stem":242},"\u002Fprojetos-integradores\u002Fpi-05-gestao-estoque\u002Freadme","3.projetos-integradores\u002F05.pi-05-gestao-estoque\u002F2.readme",{"title":244,"path":245,"stem":246,"children":247},"🛵 Projeto 06: Aplicativo de Delivery","\u002Fprojetos-integradores\u002Fpi-06-delivery","3.projetos-integradores\u002F06.pi-06-delivery\u002Findex",[248,249],{"title":244,"path":245,"stem":246},{"title":204,"path":250,"stem":251},"\u002Fprojetos-integradores\u002Fpi-06-delivery\u002Freadme","3.projetos-integradores\u002F06.pi-06-delivery\u002F2.readme",{"id":253,"title":204,"body":254,"description":907,"extension":908,"links":909,"meta":910,"navigation":457,"path":214,"seo":911,"stem":215,"__hash__":912},"docs\u002F3.projetos-integradores\u002F02.pi-02-gerador-senhas\u002F2.readme.md",{"type":255,"value":256,"toc":883},"minimark",[257,266,269,274,288,294,308,310,314,319,351,355,359,365,369,380,384,390,394,405,409,411,415,419,422,425,429,495,497,501,504,549,551,555,558,563,573,591,597,599,614,616,620,624,627,630,640,644,649,652,654,658,662,669,672,676,715,717,721,732,778,780,784,872,879],[258,259,260,261,265],"p",{},"Abaixo, apresento a estrutura detalhada do projeto ",[262,263,264],"strong",{},"\"SafePass Corporate\"",", formatada para os padrões acadêmicos do curso.",[267,268],"hr",{},[270,271,273],"h2",{"id":272},"_1-contexto-do-projeto","1. Contexto do Projeto",[275,276,277,284,286],"ul",{},[278,279,280,283],"li",{},[262,281,282],{},"Título:"," SafePass Corporate - Gerador e Gestor de Senhas Temporárias.",[278,285],{},[278,287],{},[258,289,290,293],{},[262,291,292],{},"Disciplinas Integradas:"," Engenharia de Software + Banco de Dados.",[275,295,296,302],{},[278,297,298,301],{},[262,299,300],{},"Problema:"," Insegurança no compartilhamento de senhas pessoais\u002Fmestres entre colaboradores e dificuldade em gerir múltiplas senhas com requisitos variados.",[278,303,304,307],{},[262,305,306],{},"Objetivo:"," Prover uma ferramenta interna para geração de senhas aleatórias seguras, com armazenamento em banco de dados para consulta posterior e campos de anotação para contexto de uso.",[267,309],{},[270,311,313],{"id":312},"_2-engenharia-de-software","2. Engenharia de Software",[315,316,318],"h3",{"id":317},"_21-requisitos-funcionais-rf","2.1 Requisitos Funcionais (RF)",[275,320,321,327,333,339,345],{},[278,322,323,326],{},[262,324,325],{},"RF-001:"," O sistema deve permitir que o usuário defina o comprimento da senha (quantidade de caracteres).",[278,328,329,332],{},[262,330,331],{},"RF-002:"," O sistema deve gerar uma senha aleatória que inclua letras, números e símbolos.",[278,334,335,338],{},[262,336,337],{},"RF-003:"," O sistema deve permitir salvar a senha gerada vinculada a uma anotação.",[278,340,341,344],{},[262,342,343],{},"RF-004:"," O sistema deve registrar automaticamente a data e hora da criação da senha.",[278,346,347,350],{},[262,348,349],{},"RF-005:"," O sistema deve listar todas as senhas salvas para visualização do usuário.",[315,352,354],{"id":353},"_22-requisitos-não-funcionais-rnf","2.2 Requisitos Não Funcionais (RNF)",[275,356,357],{},[278,358],{},[258,360,361,364],{},[262,362,363],{},"RNF-001 (Segurança):"," As senhas devem ser exibidas de forma protegida (ex: campo \"password\" ou máscara) na listagem inicial.",[275,366,367],{},[278,368],{},[258,370,371,374,375,379],{},[262,372,373],{},"RNF-002 (Integridade):"," Uso de ",[376,377,378],"code",{},"Prepared Statements"," (via Flask-MySQLdb ou SQLAlchemy) para evitar SQL Injection.",[275,381,382],{},[278,383],{},[258,385,386,389],{},[262,387,388],{},"RNF-003 (Usabilidade):"," Interface responsiva para que o gestor possa gerar senhas via dispositivo móvel.",[315,391,393],{"id":392},"_23-orientação-a-objetos-uml-mermaid","2.3 Orientação a Objetos (UML Mermaid)",[258,395,396,397,400,401,404],{},"Utilizando os princípios de ",[262,398,399],{},"SOLID"," e ",[262,402,403],{},"Clean Code"," que você aplica em suas aulas, a modelagem segue:",[406,407],"mermaid",{"code":408},"classDiagram\n    class PasswordGenerator {\n        +int length\n        +String charset\n        +generate() String\n    }\n    class PasswordEntry {\n        +int id\n        +String encryptedPassword\n        +String annotation\n        +DateTime createdAt\n        +save() void\n    }\n    PasswordGenerator ..> PasswordEntry : creates\n",[267,410],{},[270,412,414],{"id":413},"_3-banco-de-dados-mysql","3. Banco de Dados (MySQL)",[315,416,418],{"id":417},"_31-modelo-entidade-relacionamento-mer","3.1 Modelo Entidade-Relacionamento (MER)",[258,420,421],{},"Conforme sua solicitação de dados iniciais:",[406,423],{"code":424},"erDiagram\n    SENHA_GERADA {\n        int id_senha PK\n        string senha_texto\n        string anotacao\n        datetime data_hora_requisicao\n    }\n",[315,426,428],{"id":427},"_32-script-ddl-criação-das-tabelas","3.2 Script DDL (Criação das Tabelas)",[430,431,436],"pre",{"className":432,"code":433,"language":434,"meta":435,"style":435},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","CREATE DATABASE safepass_db;\nUSE safepass_db;\n\nCREATE TABLE senhas (\n    id_senha INT AUTO_INCREMENT PRIMARY KEY,\n    senha_texto VARCHAR(255) NOT NULL,\n    anotacao TEXT,\n    data_hora_requisicao DATETIME DEFAULT CURRENT_TIMESTAMP\n);\n\n","sql","",[376,437,438,446,452,459,465,471,477,483,489],{"__ignoreMap":435},[439,440,443],"span",{"class":441,"line":442},"line",1,[439,444,445],{},"CREATE DATABASE safepass_db;\n",[439,447,449],{"class":441,"line":448},2,[439,450,451],{},"USE safepass_db;\n",[439,453,455],{"class":441,"line":454},3,[439,456,458],{"emptyLinePlaceholder":457},true,"\n",[439,460,462],{"class":441,"line":461},4,[439,463,464],{},"CREATE TABLE senhas (\n",[439,466,468],{"class":441,"line":467},5,[439,469,470],{},"    id_senha INT AUTO_INCREMENT PRIMARY KEY,\n",[439,472,474],{"class":441,"line":473},6,[439,475,476],{},"    senha_texto VARCHAR(255) NOT NULL,\n",[439,478,480],{"class":441,"line":479},7,[439,481,482],{},"    anotacao TEXT,\n",[439,484,486],{"class":441,"line":485},8,[439,487,488],{},"    data_hora_requisicao DATETIME DEFAULT CURRENT_TIMESTAMP\n",[439,490,492],{"class":441,"line":491},9,[439,493,494],{},");\n",[267,496],{},[270,498,500],{"id":499},"_4-protótipo-da-interface-sugestão-para-google-stitch","4. Protótipo da Interface (Sugestão para Google Stitch)",[258,502,503],{},"Para gerar a interface no Google Stitch, você pode utilizar este guia de componentes:",[275,505,506,512,517,523,529],{},[278,507,508,511],{},[262,509,510],{},"Cores:"," Estilo \"Dark Mode\" ou \"Corporate Blue\" para transmitir segurança.",[278,513,514],{},[262,515,516],{},"Layout:",[278,518,519,522],{},[262,520,521],{},"Topo:"," Título \"SafePass\" e contador de senhas ativas.",[278,524,525,528],{},[262,526,527],{},"Centro:"," Slider para escolher o tamanho da senha (8 a 32 caracteres) e botão \"Gerar e Salvar\".",[278,530,531,534,535,538,539,538,542,400,545,548],{},[262,532,533],{},"Baixo:"," Tabela\u002FGrid com as colunas: ",[376,536,537],{},"Senha (Oculta)",", ",[376,540,541],{},"Anotação",[376,543,544],{},"Data\u002FHora",[376,546,547],{},"Ações (Ver\u002FCopiar\u002FExcluir)",".",[267,550],{},[270,552,554],{"id":553},"_5-próximos-passos-sugestão-de-pedagogia","5. Próximos Passos (Sugestão de Pedagogia)",[258,556,557],{},"Como este projeto foca em segurança interna empresarial:",[559,560,561],"ol",{},[278,562],{},[258,564,565,568,569,572],{},[262,566,567],{},"Segurança Adicional:"," Sugerir aos alunos o uso da biblioteca ",[376,570,571],{},"cryptography.fernet"," do Python para não salvar a senha em \"texto limpo\" no MySQL.",[559,574,575,581],{"start":448},[278,576,577,580],{},[262,578,579],{},"Integração:"," Criar um endpoint API em Flask que permita que outros sistemas da empresa solicitem senhas temporárias automaticamente.",[278,582,583,586,587,590],{},[262,584,585],{},"Refatoração:"," Aplicar o padrão ",[262,588,589],{},"MVC (Model-View-Controller)",", separando as rotas do Flask (Controller) da lógica do banco de dados (Model).",[258,592,593,594,548],{},"Este projeto está pronto para ser inserido no seu ecossistema de repositórios do ",[262,595,596],{},"Jekyll\u002FMkDocs",[267,598],{},[258,600,601,602,605,606,609,610,613],{},"Com base nas diretrizes de ",[262,603,604],{},"Engenharia de Software"," e nos princípios de segurança para sistemas internos, apresento o detalhamento técnico avançado do projeto ",[262,607,608],{},"SafePass Corporate",". Esta versão incorpora as melhorias de criptografia e arquitetura ",[262,611,612],{},"MVC"," para garantir que o sistema seja robusto para o ambiente empresarial.",[267,615],{},[270,617,619],{"id":618},"_2-engenharia-de-software-avançada","2. Engenharia de Software (Avançada)",[315,621,623],{"id":622},"_24-diagrama-de-casos-de-uso","2.4 Diagrama de Casos de Uso",[258,625,626],{},"O diagrama ilustra as interações focadas na privacidade. O \"Gestor\" pode gerar senhas para colaboradores sem expor sua própria senha mestra.",[406,628],{"code":629},"flowchart LR\n    User((\"Colaborador\u002FGestor\"))\n    Audit((\"Sistema de Auditoria\"))\n\n    subgraph Sistema [\"SafePass Corporate\"]\n        direction TB\n        UC1([\"Configurar Parâmetros de Senha\"])\n        UC2([\"Gerar Senha Aleatória\"])\n        UC3([\"Adicionar Anotação de Contexto\"])\n        UC4([\"Visualizar Histórico de Senhas\"])\n        UC5([\"Criptografar Dados em Repouso\"])\n    end\n\n    User --> UC1\n    User --> UC2\n    User --> UC3\n    User --> UC4\n    UC2 -.->|\u003C\u003Cinclude>>| UC5\n    Audit --> UC4\n",[258,631,632,635],{},[262,633,634],{},"Versão em SVG (Diagrama de Casos de Uso):",[636,637],"img",{"alt":638,"src":639},"Diagrama de Casos de Uso","\u002Fimg\u002Fprojetos-integradores\u002Fpi-02-gerador-senhas\u002Fusecase_safepass.svg",[315,641,643],{"id":642},"_25-arquitetura-de-classes-padrão-mvc","2.5 Arquitetura de Classes (Padrão MVC)",[258,645,646,647,548],{},"Para este projeto, estruturamos as classes separando a lógica de geração (Model) da interface e controle, conforme as boas práticas de ",[262,648,403],{},[406,650],{"code":651},"classDiagram\n    class PasswordModel {\n        -String raw_password\n        -String encrypted_password\n        +generate_random(length: int)\n        +encrypt(key: String)\n        +decrypt(key: String)\n    }\n    class PasswordController {\n        +create_entry(length: int, note: String)\n        +get_all_entries()\n    }\n    class PasswordView {\n        +render_dashboard()\n        +display_password_list()\n    }\n\n    PasswordController --> PasswordModel : gerencia\n    PasswordController --> PasswordView : atualiza\n",[267,653],{},[270,655,657],{"id":656},"_3-banco-de-dados-e-segurança","3. Banco de Dados e Segurança",[315,659,661],{"id":660},"_31-mer-modelo-entidade-relacionamento","3.1 MER (Modelo Entidade-Relacionamento)",[258,663,664,665,668],{},"O modelo foi expandido para incluir o campo de ",[262,666,667],{},"hash\u002Fcriptografia",", garantindo que, mesmo em caso de vazamento do banco, as senhas não estejam em texto claro.",[406,670],{"code":671},"erDiagram\n    USUARIO ||--o{ SENHA : \"gera\"\n    SENHA {\n        int id_senha PK\n        string senha_criptografada\n        string sal_hash\n        string anotacao\n        datetime criado_em\n    }\n",[315,673,675],{"id":674},"_32-melhorias-de-segurança-implementadas","3.2 Melhorias de Segurança Implementadas",[559,677,678,695,705],{},[278,679,680,683,684,687,688,690,691,694],{},[262,681,682],{},"Criptografia em Repouso:"," As senhas não são salvas como ",[376,685,686],{},"VARCHAR"," comum, mas sim criptografadas com a biblioteca ",[376,689,571],{}," antes do ",[376,692,693],{},"INSERT"," no MySQL.",[278,696,697,700,701,704],{},[262,698,699],{},"Mascaramento de Interface:"," Na visualização ampla, as senhas aparecem ocultas (ex: ",[376,702,703],{},"********","), sendo reveladas apenas sob clique ou autenticação, garantindo conforto e segurança no ambiente interno.",[278,706,707,710,711,714],{},[262,708,709],{},"Rastreabilidade:"," O campo ",[376,712,713],{},"data_hora_requisicao"," funciona como uma trilha de auditoria para o uso empresarial.",[267,716],{},[270,718,720],{"id":719},"_4-implementação-da-lógica-em-python-flask","4. Implementação da Lógica em Python (Flask)",[258,722,723,724,727,728,731],{},"Como você utiliza o ecossistema ",[262,725,726],{},"Python\u002FFlask"," em suas aulas e projetos, a lógica principal de geração utiliza a biblioteca ",[376,729,730],{},"secrets",", que é criptograficamente segura:",[430,733,737],{"className":734,"code":735,"language":736,"meta":435,"style":435},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import secrets\nimport string\n\ndef generate_safe_password(length):\n    # Unifica letras, números e símbolos conforme o requisito\n    alphabet = string.ascii_letters + string.digits + string.punctuation\n    password = ''.join(secrets.choice(alphabet) for i in range(length))\n    return password\n\n","python",[376,738,739,744,749,753,758,763,768,773],{"__ignoreMap":435},[439,740,741],{"class":441,"line":442},[439,742,743],{},"import secrets\n",[439,745,746],{"class":441,"line":448},[439,747,748],{},"import string\n",[439,750,751],{"class":441,"line":454},[439,752,458],{"emptyLinePlaceholder":457},[439,754,755],{"class":441,"line":461},[439,756,757],{},"def generate_safe_password(length):\n",[439,759,760],{"class":441,"line":467},[439,761,762],{},"    # Unifica letras, números e símbolos conforme o requisito\n",[439,764,765],{"class":441,"line":473},[439,766,767],{},"    alphabet = string.ascii_letters + string.digits + string.punctuation\n",[439,769,770],{"class":441,"line":479},[439,771,772],{},"    password = ''.join(secrets.choice(alphabet) for i in range(length))\n",[439,774,775],{"class":441,"line":485},[439,776,777],{},"    return password\n",[267,779],{},[270,781,783],{"id":782},"_5-cronograma-de-desenvolvimento-sugestão","5. Cronograma de Desenvolvimento (Sugestão)",[785,786,787,803],"table",{},[788,789,790],"thead",{},[791,792,793,797,800],"tr",{},[794,795,796],"th",{},"Semana",[794,798,799],{},"Atividade Principal",[794,801,802],{},"Foco Técnico",[804,805,806,820,833,846,859],"tbody",{},[791,807,808,814,817],{},[809,810,811],"td",{},[262,812,813],{},"S1",[809,815,816],{},"Requisitos e Escopo",[809,818,819],{},"Definição de tamanhos de senha e tipos de anotação.",[791,821,822,827,830],{},[809,823,824],{},[262,825,826],{},"S2",[809,828,829],{},"Modelagem de Dados",[809,831,832],{},"Criação do banco MySQL e tabelas de log.",[791,834,835,840,843],{},[809,836,837],{},[262,838,839],{},"S3",[809,841,842],{},"Lógica de Backend",[809,844,845],{},"Implementação do gerador e criptografia em Python.",[791,847,848,853,856],{},[809,849,850],{},[262,851,852],{},"S4",[809,854,855],{},"Interface Web",[809,857,858],{},"Desenvolvimento do dashboard em Flask com templates HTML\u002FCSS.",[791,860,861,866,869],{},[809,862,863],{},[262,864,865],{},"S5",[809,867,868],{},"Testes e Auditoria",[809,870,871],{},"Validação da persistência e segurança dos dados salvos.",[258,873,874,875,878],{},"Este detalhamento está pronto para ser incorporado ao seu fluxo de documentação em ",[262,876,877],{},"Markdown",".sim,",[880,881,882],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":435,"searchDepth":448,"depth":454,"links":884},[885,886,891,895,896,897,901,905,906],{"id":272,"depth":448,"text":273},{"id":312,"depth":448,"text":313,"children":887},[888,889,890],{"id":317,"depth":454,"text":318},{"id":353,"depth":454,"text":354},{"id":392,"depth":454,"text":393},{"id":413,"depth":448,"text":414,"children":892},[893,894],{"id":417,"depth":454,"text":418},{"id":427,"depth":454,"text":428},{"id":499,"depth":448,"text":500},{"id":553,"depth":448,"text":554},{"id":618,"depth":448,"text":619,"children":898},[899,900],{"id":622,"depth":454,"text":623},{"id":642,"depth":454,"text":643},{"id":656,"depth":448,"text":657,"children":902},[903,904],{"id":660,"depth":454,"text":661},{"id":674,"depth":454,"text":675},{"id":719,"depth":448,"text":720},{"id":782,"depth":448,"text":783},"Este é um excelente tema para um Projeto Integrador, pois une a lógica de programação de algoritmos de segurança com a persistência de dados e o desenvolvimento web, seguindo o padrão de stacks que você costuma lecionar e desenvolver (Python, Flask e MySQL).","md",null,{},{"title":204,"description":907},"sADYqs6li4jS80cOpZ_y0gT4Mj7se9UAd4WNr8V-z3E",[914,915],{"title":208,"path":209,"stem":210,"description":435,"children":-1},{"title":217,"path":218,"stem":219,"description":435,"children":-1},1788375147144]