Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Plz code in java ad right code the book is Java An introduction to problem solvi

ID: 3845921 • Letter: P

Question

Plz code in java ad right code

the book is Java An introduction to problem solving 7ed

The Assignment:

      Chapter 7:

      Programming Projects 8:  This project is found starting on page 579

     

Assignment guidelines:

         

Traditional password entry schemes are susceptible to “shoulder surfing” in which an attacker watches an unsuspecting user enter their password or PIN number and uses it later to gain access to the account.   One way to combat this problem is with a randomized challenge-response system.   In these systems the user enters different information every time based on a secret in response to a randomly generated challenge. Consider the following scheme in which the password consists of a five-digit PIN number (00000 to 99999).   Each digit is assigned a random number that is 1, 2, or 3.   The user enters the random numbers that correspond to their PIN instead of their actual PIN numbers.

For example, consider an actual PIN number of 12345.   To authenticate the user would be presented with a screen such as:

PIN: 0 1 2 3 4 5 6 7 8 9

NUM: 3 2 3 1 1 3 2 2 1 3

The user would enter 23113 instead of 12345. This does not divulge the password even if an attacker intercepts the entry because 23113 could correspond to other PIN numbers, such as 69440 or 70439. The next time the user logs in, a different sequence of random numbers would be generated, such as:

PIN: 0 1 2 3 4 5 6 7 8 9

NUM: 1 1 2 3 1 2 2 3 3 3

Write a class AuthenticateDemo to use the Authenticate class, to simulate the authentication process.

Note:

1. Store an actual PIN number in your program.

2. The program should use an array to assign random numbers to the digits from 0 to 9.

3. Output the random digits to the screen, input the response from the user, and output whether or not the user’s response correctly matches the PIN number.

Sample Run for Actual password 99508:

A. correct input:

----jGRASP exec: java AuthenticateDemo

Welcome! To log in, enter the random digits from 1-3 that
correspond to your PIN number.

PIN digit: 0 1 2 3 4 5 6 7 8 9
Random #: 2 1 1 2 2 3 3 2 1 2 Enter code.
22321
Correct! You may now proceed.


----jGRASP: operation complete.

B. Non correct input:

----jGRASP exec: java AuthenticateDemo

Welcome! To log in, enter the random digits from 1-3 that
correspond to your PIN number.

PIN digit: 0 1 2 3 4 5 6 7 8 9
Random #: 2 3 3 3 3 3 1 3 1 2 Enter code.
22623
Error, invalid password entered.

----jGRASP: operation complete.

Note:

Assignment must have the following files:

1. class Authenticate, in file Authenticate.java

2. class AuthenticateDemo, in a file AuthenticateDemo.java

Explanation / Answer

import java.util.Random;

public class Authenticate {

   /**
   * method to generate array
   *
   * @param min
   * @param max
   * @return
   */
   public static int[] randomArray(int min, int max) {
       int[] randomArr = new int[10];
       Random random = new Random();

       for (int i = 0; i < randomArr.length; i++) {
           int randomNumber = random.nextInt(max + 1 - min) + min;
           randomArr[i] = randomNumber;

       }

       return randomArr;

   }

   /**
   * method to validate
   *
   * @param pin
   * @param code
   * @param randomArr
   * @return
   */
   public static boolean validate(int pin, int code, int[] randomArr) {

       int codeRem, pinRem;

       while (code != 0 && pin != 0) {

           codeRem = code % 10;
           pinRem = pin % 10;

           if (!checkPinForCode(randomArr, codeRem, pinRem)) {
               return false;
           }

           code = code / 10;
           pin = pin / 10;

       }

       return true;
   }

   /**
   * method to check for pin
   *
   * @param randomArr
   * @param code
   * @param index
   * @return
   */
   public static boolean checkPinForCode(int[] randomArr, int codeRem,
           int index) {

       if (randomArr[index] == codeRem)
           return true;
       else
           return false;
   }

}

import java.util.Scanner;

public class AuthenticateDemo {

   public static void main(String[] args) {

       int pin = 99508;
       System.out
               .println("Welcome! To log in, enter the random digits from 1-3 that correspond to your PIN number.");
       Scanner scanner = new Scanner(System.in);
       // int[] randomArr = { 2, 1, 1, 2, 2, 3, 3, 2, 1, 2 };
       int[] randomArr = Authenticate.randomArray(1, 3);
       System.out.println("PIN digit: 0 1 2 3 4 5 6 7 8 9");
       System.out.print("Random #: ");
       for (int i = 0; i < randomArr.length; i++) {
           System.out.print(randomArr[i] + " ");
       }
       System.out.print(" Enter code : ");
       int code = scanner.nextInt();

       if (Authenticate.validate(pin, code, randomArr)) {
           System.out.println("Correct! You may now proceed.");

       } else {

           System.out.println("Error, invalid password entered.");
       }

       System.out.println("operation complete");

   }
}

OUTPUT:

A. Correct input:
Welcome! To log in, enter the random digits from 1-3 that
correspond to your PIN number.
PIN digit: 0 1 2 3 4 5 6 7 8 9
Random #: 2 1 1 2 2 3 3 2 1 2
Enter code : 22321
Correct! You may now proceed.
operation complete

B. Non correct input:
Welcome! To log in, enter the random digits from 1-3 that
correspond to your PIN number.
PIN digit: 0 1 2 3 4 5 6 7 8 9
Random #: 1 3 2 1 2 3 2 1 2 2
Enter code : 22623
Error, invalid password entered.
operation complete