Title: generateur de mdp en java · Issue #188 · hmkcode/Java · GitHub
Open Graph Title: generateur de mdp en java · Issue #188 · hmkcode/Java
X Title: generateur de mdp en java · Issue #188 · hmkcode/Java
Description: // Fichier: PasswordGeneratorGUI.java import javax.swing.; import java.awt.; import java.awt.datatransfer.; import java.awt.event.; import java.security.SecureRandom; import java.util.*; public class PasswordGeneratorGUI extends JFrame {...
Open Graph Description: // Fichier: PasswordGeneratorGUI.java import javax.swing.; import java.awt.; import java.awt.datatransfer.; import java.awt.event.; import java.security.SecureRandom; import java.util.*; public cla...
X Description: // Fichier: PasswordGeneratorGUI.java import javax.swing.; import java.awt.; import java.awt.datatransfer.; import java.awt.event.; import java.security.SecureRandom; import java.util.*; public cla...
Opengraph URL: https://github.com/hmkcode/Java/issues/188
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"generateur de mdp en java","articleBody":"// Fichier: PasswordGeneratorGUI.java\nimport javax.swing.*;\nimport java.awt.*;\nimport java.awt.datatransfer.*;\nimport java.awt.event.*;\nimport java.security.SecureRandom;\nimport java.util.*;\n\npublic class PasswordGeneratorGUI extends JFrame {\n private static final String LOWER = \"abcdefghijklmnopqrstuvwxyz\";\n private static final String UPPER = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n private static final String DIGIT = \"0123456789\";\n private static final String SYMBOL = \"!@#$%^\u0026*;\n\n private static final Set\u003cCharacter\u003e SIMILAR = new HashSet\u003c\u003e(Arrays.asList(\n '0','O','o','1','l','I','|','5','S','2','Z','8','B'\n ));\n \n\n private static final SecureRandom RNG = new SecureRandom();\n\n // UI components\n private JTextField outputField;\n private JSlider lengthSlider;\n private JCheckBox lowerBox, upperBox, digitBox, symbolBox, excludeSimilarBox, requireEachBox;\n private JLabel entropyLabel, strengthLabel;\n\n public PasswordGeneratorGUI() {\n super(\"🔐 Générateur de mots de passe\");\n\n setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\n setSize(500, 300);\n setLayout(new BorderLayout(10,10));\n\n // Top output\n JPanel top = new JPanel(new BorderLayout(5,5));\n outputField = new JTextField();\n outputField.setFont(new Font(\"Monospaced\", Font.PLAIN, 16));\n top.add(outputField, BorderLayout.CENTER);\n\n JButton copyBtn = new JButton(\"Copier\");\n copyBtn.addActionListener(e -\u003e copyToClipboard());\n top.add(copyBtn, BorderLayout.EAST);\n\n add(top, BorderLayout.NORTH);\n\n // Center controls\n JPanel center = new JPanel();\n\n center.setLayout(new GridLayout(0,2));\n\n lowerBox = new JCheckBox(\"Minuscules (a-z)\", true);\n upperBox = new JCheckBox(\"Majuscules (A-Z)\", true);\n digitBox = new JCheckBox(\"Chiffres (0-9)\", true);\n symbolBox = new JCheckBox(\"Symboles (!@#…)\", true);\n excludeSimilarBox = new JCheckBox(\"Exclure caractères ambigus (0,O,1,l...)\", true);\n requireEachBox = new JCheckBox(\"Exiger ≥1 caractère de chaque catégorie\", true);\n\n center.add(lowerBox);\n center.add(upperBox);\n center.add(digitBox);\n center.add(symbolBox);\n center.add(excludeSimilarBox);\n center.add(requireEachBox);\n\n add(center, BorderLayout.CENTER);\n\n // Bottom panel\n JPanel bottom = new JPanel(new BorderLayout(5,5));\n\n lengthSlider = new JSlider(8, 64, 16);\n lengthSlider.setMajorTickSpacing(14);\n lengthSlider.setMinorTickSpacing(2);\n lengthSlider.setPaintTicks(true);\n lengthSlider.setPaintLabels(true);\n\n bottom.add(new JLabel(\"Longueur :\"), BorderLayout.WEST);\n bottom.add(lengthSlider, BorderLayout.CENTER);\n\n JButton genBtn = new JButton(\"Générer\");\n genBtn.addActionListener(e -\u003e generatePassword());\n bottom.add(genBtn, BorderLayout.EAST);\n\n add(bottom, BorderLayout.SOUTH);\n\n // Status panel\n JPanel status = new JPanel(new GridLayout(2,1));\n entropyLabel = new JLabel(\"Entropie : -- bits\");\n strengthLabel = new JLabel(\"Robustesse : --\");\n status.add(entropyLabel);\n status.add(strengthLabel);\n add(status, BorderLayout.WEST);\n\n setLocationRelativeTo(null); // center window\n setVisible(true);\n }\n\n private void copyToClipboard() {\n String text = outputField.getText();\n if (text.isEmpty()) return;\n Toolkit.getDefaultToolkit()\n .getSystemClipboard()\n .setContents(new StringSelection(text), null);\n JOptionPane.showMessageDialog(this, \"Mot de passe copié !\");\n }\n\n private void generatePassword() {\n int length = lengthSlider.getValue();\n\n java.util.List\u003cString\u003e sets = new ArrayList\u003c\u003e();\n if (lowerBox.isSelected()) sets.add(LOWER);\n if (upperBox.isSelected()) sets.add(UPPER);\n if (digitBox.isSelected()) sets.add(DIGIT);\n if (symbolBox.isSelected()) sets.add(SYMBOL);\n\n String pool = combineAndFilter(sets, excludeSimilarBox.isSelected());\n\n if (pool.isEmpty()) {\n JOptionPane.showMessageDialog(this, \"Aucun jeu de caractères disponible !\");\n return;\n }\n\n String pwd = requireEachBox.isSelected()\n ? generateWithRequirement(length, sets, pool, excludeSimilarBox.isSelected())\n : randomFromPool(pool, length);\n\n outputField.setText(pwd);\n\n // update entropy\n int uniqueChars = (int) pool.chars().distinct().count();\n double entropyBits = length * (Math.log(uniqueChars)/Math.log(2));\n String strength = strengthLabel(entropyBits);\n\n entropyLabel.setText(String.format(\"Entropie : ~%.0f bits\", entropyBits));\n strengthLabel.setText(\"Robustesse : \" + strength);\n }\n\n private String combineAndFilter(java.util.List\u003cString\u003e sets, boolean excludeSimilar) {\n StringBuilder sb = new StringBuilder();\n for (String s : sets) sb.append(s);\n\n StringBuilder out = new StringBuilder();\n for (char c : sb.toString().toCharArray()) {\n if (excludeSimilar \u0026\u0026 SIMILAR.contains(c)) continue;\n out.append(c);\n }\n return out.toString();\n }\n\n private String generateWithRequirement(int length, java.util.List\u003cString\u003e sets, String pool, boolean excludeSimilar) {\n java.util.List\u003cCharacter\u003e chars = new ArrayList\u003c\u003e();\n\n for (String s : sets) {\n String filtered = combineAndFilter(Collections.singletonList(s), excludeSimilar);\n if (!filtered.isEmpty()) {\n chars.add(filtered.charAt(RNG.nextInt(filtered.length())));\n }\n }\n\n for (int i = chars.size(); i \u003c length; i++) {\n chars.add(pool.charAt(RNG.nextInt(pool.length())));\n }\n\n // shuffle\n Collections.shuffle(chars, RNG);\n StringBuilder sb = new StringBuilder();\n for (char c : chars) sb.append(c);\n return sb.toString();\n }\n\n private String randomFromPool(String pool, int length) {\n StringBuilder sb = new StringBuilder(length);\n for (int i = 0; i \u003c length; i++) {\n sb.append(pool.charAt(RNG.nextInt(pool.length())));\n }\n return sb.toString();\n }\n\n private String strengthLabel(double bits) {\n if (bits \u003c 28) return \"Très faible\";\n if (bits \u003c 36) return \"Faible\";\n if (bits \u003c 60) return \"Correct\";\n if (bits \u003c 128) return \"Fort\";\n return \"Très fort\";\n }\n\n public static void main(String[] args) {\n SwingUtilities.invokeLater(PasswordGeneratorGUI::new);\n }\n}\n","author":{"url":"https://github.com/zainoxIII","@type":"Person","name":"zainoxIII"},"datePublished":"2025-10-01T13:10:52.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":3},"url":"https://github.com/188/Java/issues/188"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:c2b43e65-0277-110c-9d67-6aaaf64fa2ae |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | 8D02:1EFC6:176D78C:2028D2E:696AABA9 |
| html-safe-nonce | ca3c4a0e981fcc172f692f71fc7fc9e3e7b18b8484485a10a01f0dd48c911131 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI4RDAyOjFFRkM2OjE3NkQ3OEM6MjAyOEQyRTo2OTZBQUJBOSIsInZpc2l0b3JfaWQiOiI0NjE5MTQ5MDYyNzQzNjk4MzQ1IiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0= |
| visitor-hmac | 7d72e62dcddf67b994d68c238556f59c537060c1c44da18795423779248a8148 |
| hovercard-subject-tag | issue:3473509086 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/hmkcode/Java/188/issue_layout |
| twitter:image | https://opengraph.githubassets.com/a1bb4f80d6db57cdcf5f7e8b0a160dc0f41a03ce4fb82ee7ee5b02490ba48787/hmkcode/Java/issues/188 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/a1bb4f80d6db57cdcf5f7e8b0a160dc0f41a03ce4fb82ee7ee5b02490ba48787/hmkcode/Java/issues/188 |
| og:image:alt | // Fichier: PasswordGeneratorGUI.java import javax.swing.; import java.awt.; import java.awt.datatransfer.; import java.awt.event.; import java.security.SecureRandom; import java.util.*; public cla... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | zainoxIII |
| hostname | github.com |
| expected-hostname | github.com |
| None | 3eaf9b8cf1badcd7041a8ad480b9d9b28bea0ef1cc821ca9ff20f2cc7f4fe4b9 |
| turbo-cache-control | no-preview |
| go-import | github.com/hmkcode/Java git https://github.com/hmkcode/Java.git |
| octolytics-dimension-user_id | 3790597 |
| octolytics-dimension-user_login | hmkcode |
| octolytics-dimension-repository_id | 9546965 |
| octolytics-dimension-repository_nwo | hmkcode/Java |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 9546965 |
| octolytics-dimension-repository_network_root_nwo | hmkcode/Java |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | dd9a979046e6382bd084e2bd873bf65f797125ff |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width