If you are aware of any errors in any books, please let me know:  Hey Chuck,I found an error!
  Now as you can see below I do acknowledge and post errors.  In fact, I am grateful to readers who send me errors. However, sometimes people email me with an error and it does turn out to be a misunderstanding on their part, or simply something they would prefer to have been worded differently. As I get a large volume of email, please only send actual errors that you are relatively sure are indeed errors.  Thank you

Modern Cryptography: Applied Mathematics for Encryption and Information Security
Chapter 1 Page 7 discussing Affine Ciphers has
Attack at dawn
Frrfj0 fr bfxf

It should be
Frrfj0 fr lfxf
Chapter 4 Fermat Prime is formatted wrong. It should be 2^ 2n (2 raised to the 2n power) + 1
Page 112  Page 112 has Galois living from 1811 to 1932 which would have made him 121 years old. That should be 1811 to 1832

Chapter 4, page 83 The truth table is incorrect on row three. Row three should have an F as the result, not a T
Chapter 5 question 4 should be A ring not C group

Note on the Birthday Paradox.  In the book I describe the birthday paradox and use DES as an example.  This has generated some negative comments, and frankly one individual has become obsessive on Amazon.com and other sites on this issue.  Allow me to state for the record:
1. The Birthday paradox in the form described in the text is applicable to hash collisions, not symmetric ciphers.  I was giving a simplified example.  As the book states several times, the math is simplified so those without a math background can understand.  In this case it may have been over simplified. It is an unfortunate fact that sometimes when over simplifying something, one can go to far.  And in this case that occurred.  To be more direct: the description of the birthday paradox given in the book is accurate and detailed, however the application to DES is inaccurate.  The birthday paradox is usually applied to hash collisions. Yes the birthday paradox can be applied to symmetric ciphers (as noted below) but not in the basic form presented in the book.

2. However, there are variations of the birthday paradox that are applicable to symmetric ciphers.  One example is Using collisions (i.e. birthday paradox) in conjunction with other methods to attack AES.

C++ Programming Fundamentals
chapter 2 Image 2.7 is wrong. It should be
Chapter 3

In Chapter 3, page 9, you talk about String Properties and Methods, and the C-style string function that are still used frequently.  In Example 3.8,

That line should be


then of course

cout << "Both strings you entered are " << firststring<< "\n";

What happens with strcat is the second string is appended to the first. There is no need for a third string.

Learn VB.Net 1st Edition
Chapter 1 and 2
  • The example for the calculator refers to a control array, these are no longer supported in VB.Net, just use single controls.
  • The calculations for the math have an error in the select case statement. All cases say to add. Each case should do the appropriate math.
Chapter 5 The database example (5.1) works fine up to the point where you fill in the code for the buttons. The appropriate code for the form load, and all click events is shown here:
Public Class Form1
Inherits System.Windows.Forms.Form
Dim dbindingmanager As BindingManagerBase

#Region " Windows Form Designer generated code "

#End Region

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' This code is needed to fill in the data set
' with data from the underlying database.

' set the binding manager
dbindingmanager = Me.BindingContext(DataSet11, "students")

End Sub

Private Sub btnnext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnnext.Click
dbindingmanager.Position += 1
End Sub

Private Sub btnprevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnprevious.Click
dbindingmanager.Position -= 1
End Sub
End Class
Private Sub btnadd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnadd.Click

End Sub

Private Sub btndelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btndelete.Click

End Sub

Private Sub btnupdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnupdate.Click
' you must stop editing before updating

'Update from the dataset
'clear and refill dataset
End Sub

Advanced Java Script 2nd Edition

  1. In this book I discuss the 'Live Payment' (on page 13)product being used by Netscape. Netscape has discontinued this product.
    The link to their statement on this issue is provided here
    Live Payment
  2. On page 53 I erroniously state that their is no switch statement in JavaScript but it may
    be included at a later date. It has already been included.
  3. On page 53 the code says
    var number = prompt("Enter a number:", 0)
    alert(number, " is a ", typeof number) // "... is a string"
    number = parseInt(number)
    alert(number, " is a ", typeof number) // "... is a number"
    It should say
    var number = prompt("Enter a number:", 0)
    alert(number + " is a " + typeof(number)) // "... is a string"
    number = parseInt(number)
    alert(number + " is a " + typeof(number)) // "... is a number"