Maak een Ruby-script dat een willekeurig wachtwoord genereert op basis van gespecificeerde criteria
description
Het script helpt je bij het maken van veilige wachtwoorden die op jouw behoeften zijn afgestemd, waardoor je beveiligingspraktijken verbeteren en je begrip van Ruby-programmering wordt vergroot. Het dient ook als een praktische oefening in werken met randomisatie en stringverwerking in Ruby.
prompt
try_prompt
Help me een Ruby-script schrijven dat een willekeurig wachtwoord genereert volgens de volgende specificaties: {{wachtwoord_lengte}} tekens lang, inclusief hoofdletters, kleine letters, cijfers en speciale tekens. Zorg dat het gegenereerde wachtwoord ... more
generate_helper
...
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een Ruby-script dat aan jouw specificaties voldoet:
```ruby
# Vraag om optionele invoer van te includeren of uit te sluiten tekens
puts "Wil je specifieke tekens includeren of uitsluiten? (ja/nee)"
antwoord = gets.chomp.downcase
include_tekens = ""
exclude_tekens = ""
if antwoord == 'ja'
puts "Voer de tekens in die je wilt includeren (gebruik geen spaties):"
include_tekens = gets.chomp
puts "Voer de tekens in die je wilt uitsluiten (gebruik geen spaties):"
exclude_tekens = gets.chomp
end
# Definieer de karaktersets
hoofdletters = ('A'..'Z').to_a
kleine_letters = ('a'..'z').to_a
cijfers = ('0'..'9').to_a
speciale_tekens = ['!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '=', '+', '[', ']', '{', '}', '|', ';', ':', ',', '.', '<', '>', '/', '?', '~', '`']
# Combineer sets afhankelijk van input
karakterset = []
# Voeg standaard sets toe
karakterset += hoofdletters + kleine_letters + cijfers + speciale_tekens
# Filter op include en exclude
if include_tekens != ''
# Voeg alleen de inbegrepen tekens toe
karakterset = include_tekens.chars & karakterset
end
if exclude_tekens != ''
# Verwijder uitgesloten tekens
karakterset -= exclude_tekens.chars
end
# Zorg dat er voldoende tekens beschikbaar zijn
if karakterset.empty?
puts "Geen tekens beschikbaar om een wachtwoord te genereren. Controleer je invoer."
exit
end
# Functie om wachtwoord te genereren
def genereer_wachtwoord(lengte, karakterset)
wachtwoord = ''
lengte.times do
wachtwoord += karakterset.sample
end
wachtwoord
end
# Functie om wachtwoordveiligheid te checken
def wachtwoord_veilig(wachtwoord)
# Check minimaal 1 hoofdletter, 1 kleine letter, 1 cijfer, 1 speciaal teken
heeft_hoofdletter = wachtwoord =~ /[A-Z]/
heeft_kleine_letter = wachtwoord =~ /[a-z]/
heeft_cijfer = wachtwoord =~ /\d/
heeft_speciaal = wachtwoord =~ /[^A-Za-z\d]/
# Optioneel: check op lengte en diversiteit
if wachtwoord.length >= 8 && heeft_hoofdletter && heeft_kleine_letter && heeft_cijfer && heeft_speciaal
'sterk'
else
'zwak'
end
end
# Genereren en afdrukken
wachtwoord = ''
max_attempts = 100
attempt = 0
loop do
wachtwoord = genereer_wachtwoord(8, karakterset)
break if wachtwoord_veilig(wachtwoord) == 'sterk' || attempt >= max_attempts
attempt += 1
end
puts "Gegenereerd wachtwoord: #{wachtwoord}"
if wachtwoord_veilig(wachtwoord) == 'sterk'
puts "Het wachtwoord is sterk."
else
puts "Het wachtwoord voldoet mogelijk niet aan alle sterkte-eisen, controleer zelf de sterkte."
end
```
### Wat doet dit script?
- Vraagt of je specifieke tekens wilt includeren of uitsluiten.
- Bouwt een karakterset op op basis van jouw invoer.
- Genereert een wachtwoord van 8 tekens uit de karakterset.
- Controleert of het wachtwoord sterk genoeg is volgens gangbare eisen.
- Drukt het wachtwoord af en geeft feedback over de sterkte.
### Opmerkingen:
- Het script probeert maximaal 100 keer een sterk wachtwoord te genereren.
- Je kunt de parameters aanpassen voor andere lengtes of extra controles.
- Voor extra veiligheid zou je de sterktecheck kunnen uitbreiden.
provider: deepseek
model: deepseek-chat
Hier is een Ruby-script dat voldoet aan je vereisten:
```ruby
require 'securerandom'
class WachtwoordGenerator
HOOFDLETTERS = ('A'..'Z').to_a
KLEINE_LETTERS = ('a'..'z').to_a
CIJFERS = ('0'..'9').to_a
SPECIALE_TEKENS = ['!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '=', '+', '[', ']', '{', '}', '|', ';', ':', ',', '.', '<', '>', '?', '/']
def initialize(uitgesloten_tekens: [])
@uitgesloten_tekens = uitgesloten_tekens
end
def genereer_wachtwoord(lengte = 8)
return nil if lengte < 8
beschikbare_tekens = {
hoofdletters: HOOFDLETTERS - @uitgesloten_tekens,
kleine_letters: KLEINE_LETTERS - @uitgesloten_tekens,
cijfers: CIJFERS - @uitgesloten_tekens,
speciale_tekens: SPECIALE_TEKENS - @uitgesloten_tekens
}
# Controleer of er voldoende tekens beschikbaar zijn
beschikbare_tekens.each do |type, tekens|
if tekens.empty?
puts "Fout: Geen #{type} beschikbaar na uitsluiting van tekens"
return nil
end
end
wachtwoord = []
# Zorg voor minstens één teken van elk type
wachtwoord << beschikbare_tekens[:hoofdletters].sample
wachtwoord << beschikbare_tekens[:kleine_letters].sample
wachtwoord << beschikbare_tekens[:cijfers].sample
wachtwoord << beschikbare_tekens[:speciale_tekens].sample
# Vul de rest met willekeurige tekens
alle_tekens = beschikbare_tekens.values.flatten
(lengte - 4).times { wachtwoord << alle_tekens.sample }
# Schud het wachtwoord voor willekeurigheid
wachtwoord.shuffle.join
end
def analyseer_sterkte(wachtwoord)
return "Ongeldig wachtwoord" if wachtwoord.nil? || wachtwoord.empty?
score = 0
feedback = []
# Lengte controle
if wachtwoord.length >= 12
score += 2
feedback << "✓ Lange lengte (#{wachtwoord.length} tekens)"
elsif wachtwoord.length >= 8
score += 1
feedback << "✓ Minimale lengte (#{wachtwoord.length} tekens)"
else
feedback << "✗ Te kort (minimaal 8 tekens vereist)"
end
# Diversiteit controle
heeft_hoofdletter = wachtwoord.match?(/[A-Z]/)
heeft_kleine_letter = wachtwoord.match?(/[a-z]/)
heeft_cijfer = wachtwoord.match?(/\d/)
heeft_speciaal_teken = wachtwoord.match?(/[^A-Za-z0-9]/)
score += 1 if heeft_hoofdletter
score += 1 if heeft_kleine_letter
score += 1 if heeft_cijfer
score += 1 if heeft_speciaal_teken
feedback << "✓ Bevat hoofdletters" if heeft_hoofdletter
feedback << "✓ Bevat kleine letters" if heeft_kleine_letter
feedback << "✓ Bevat cijfers" if heeft_cijfer
feedback << "✓ Bevat speciale tekens" if heeft_speciaal_teken
# Bepaal sterkte niveau
case score
when 0..2
sterkte = "Zeer zwak"
when 3..4
sterkte = "Zwak"
when 5..6
sterkte = "Gemiddeld"
when 7..8
sterkte = "Sterk"
else
sterkte = "Zeer sterk"
end
{ sterkte: sterkte, score: score, feedback: feedback }
end
end
# Hoofdprogramma
puts "=== Wachtwoord Generator ==="
puts "Standaard worden de tekens 'il1O0' uitgesloten voor betere leesbaarheid."
puts "Wil je aangepaste uitsluiting? (j/n)"
keuze = gets.chomp.downcase
uitgesloten_tekens = ['i', 'l', '1', 'O', '0'] # Standaard uitsluiting
if keuze == 'j'
puts "Geef tekens op die je wilt uitsluiten (bijvoorbeeld: 'abc123'):"
aangepaste_uitsluiting = gets.chomp.chars
uitgesloten_tekens = aangepaste_uitsluiting unless aangepaste_uitsluiting.empty?
end
generator = WachtwoordGenerator.new(uitgesloten_tekens: uitgesloten_tekens)
wachtwoord = generator.genereer_wachtwoord
if wachtwoord
puts "\nGegenereerd wachtwoord: #{wachtwoord}"
puts "Uitgesloten tekens: #{uitgesloten_tekens.join(', ')}" unless uitgesloten_tekens.empty?
analyse = generator.analyseer_sterkte(wachtwoord)
puts "\n=== Sterkte Analyse ==="
puts "Sterkte: #{analyse[:sterkte]} (score: #{analyse[:score]}/8)"
puts "Feedback:"
analyse[:feedback].each { |item| puts " #{item}" }
else
puts "Kon geen wachtwoord genereren met de opgegeven instellingen."
end
```
**Kenmerken van dit script:**
1. **Veilige wachtwoordgeneratie:**
- Gebruikt cryptografisch veilige randomisatie
- Zorgt voor minstens één teken van elk type
- Minimale lengte van 8 tekens
2. **Aanpasbare uitsluiting:**
- Standaard worden 'il1O0' uitgesloten (verwarrende tekens)
- Optie om aangepaste tekens uit te sluiten
3. **Sterkte-analyse:**
- Beoordeelt lengte en diversiteit
- Geext gedetailleerde feedback
- Score van 0-8 met bijbehorende sterkteniveaus
4. **Gebruikersvriendelijk:**
- Interactieve prompts
- Duidelijke feedback
- Foutafhandeling
**Gebruik:**
- Sla het script op als `wachtwoord_generator.rb`
- Voer uit met: `ruby wachtwoord_generator.rb`
- Volg de prompts om eventueel extra tekens uit te sluiten
Het gegenereerde wachtwoord voldoet aan gangbare beveiligingsstandaarden en is geschikt voor de meeste gebruiksscenario's.

