Friday, November 8, 2024

Digging into indices of older books (includes Excel VBA macros to facilitate decoding)

Based on my research using older books, some people in the printing industry have been encoding messages for a very long time in places where others wouldn't think to look. The index of a book is a good place to do such encoding because the typesetters can control how many characters are on a given line and what letter/number combinations each line ends with. 

Using the example of Stepping Stones to an Abundant Life, a 1971 book by David O. McKay, the president of the LDS Church who died in 1970 before the book was printed, I can show you some of what I find when I search in an index. Typos are often a tip-off of where to start in order to find what encoding patterns are being used.

The index has only two entries that start with the letter combination "smo," and one of those has a glaring typo:

Smokers lack respect for others, 283.
Smoking cigarets, warns against 281;
     overcoming habit of, 113.

The typesetter can influence what is on the first line easily but not the entire entry. So I applied doubles cancellation* to just the first line of each entry:


Smokers lack respect for others, 283.
Smoking cigarets, warns against 281;

Minus the punctuation, I get "lpfh3kcewgain1" and then, after substituting the numbers for the corresponding letters of the alphabet and capitalizing it all, I get LPFHCKCEWGAINA.

CKC actually equals "X" because the second C is before an "e" and so makes an "s" sound. This string is therefore LPFHXEWGAINA. Applying the OL cipher** to LPFHXEWGAINA in the two possible ways (one of which doesn't require any transformation since there are no other O's or L's in the string) gives me the following: 

PFHXEWGAINA
KUSCVDTZRMZ

Starting with PFHXEWGAINA, apply the X to first reverse the fragment before X and then the fragment after X, which gives the following:

HFPEWGAINA - H.F. Pew GA in A, which looks to me like a reference to the custom upholstery company HF Custom (https://www.hfcustomfurniture.com/ouramericanstory.inc), which has been in business since about 1940 and makes chairs that look like the ones in LDS Church buildings. I think the GA is supposed to mean "Gaea" (i.e., "the world," a term Jesus used to refer critically to those who sought material gain instead of being generous and good) and A is for "America."
 
PFHANIAGWE - P. F. Han Iagwe, which to me looks like P. F. Hon. Iago, or Prince Philip Honorable Iago. Iago is the villain in Othello, and he causes Othello to commit suicide. A little internet research turns up recent news articles on how the now-deceased husband of Queen Elizabeth II might have been involved with the major players in a scandal that brought down the UK government in the 1960s and resulted in one man committing suicide. Look into the Profumo affair, Stephen Ward, and Christine Keeler; also see https://www.independent.co.uk/news/uk/home-news/prince-phillip-profumo-affair-scandal-fbi-hoover-b2583748.html. I doubt Prince Philip himself was involved in causing the suicide of Stephen Ward, for there would have been several government functionaries surrounding him who had their own reasons to keep Philip's reputation intact.

Going back to KUSCVDTZRMZ, I first apply the V to pull together its two neighboring fragments in an alternating way starting from the inside:

CDSTUZKRMZ

I then use the first Z in CDSTUZKRMZ to pull together its two neighboring fragments in an alternating way starting from the outside:

CZDMSRTKU

I then use the remaining Z in CZDMSRTKU to pull together its two neighboring fragments, again in an alternating way starting from the outside:

CUKTRSMD - CUK TRS MD, which to me looks like kook-taurus (i.e., bull)-medical doctor, which appears to be saying that a bull was involved in revealing medical knowledge. (I've seen several clues where people who are revealing secrets are called crazy or loony.) Interestingly, there was a BBC TV show called The Doctors produced by a Donald Bull that ran from 1969-1972; quoting from IMDB, "Most of the episodes produced are missing from the archives; 139 of the 160 shows are thought to be lost." (https://www.imdb.com/title/tt0163933/plotsummary/?ref_=tt_ov_pl)

Decades after these messages and clues get encoded, we can now often deduce what they were referring to. Why encode them in book indices in the first place? Blackmail purposes? Bragging? A quiet marketplace of secrets being run by those in the archive and publishing fields? A combination of all three? I think digging into these older indices is an intriguing exercise that could also be of good in shedding light on any similar modern practices being carried out with newer technology.

I have also found that a cipher that turns Ds into Xs (from in-D-X, I think) to be productive in decoding messages and clues in indices. Below is a macro*** to aid in turning Ds into Xs and so forth.


* Here is a macro in Microsoft Excel to do cancellation of double letters:

Function RemoveDuplicates1(pWorkRng As Range) As String
'Updateby Extendoffice found online and modified
Dim xValue As String
Dim xChar As String
Dim xOutValue As String
Dim result As String
Set xDic = CreateObject("Scripting.Dictionary")
xValue = pWorkRng.Value
xValue = LCase(xValue)
For i = 1 To VBA.Len(xValue)
    xChar = VBA.Mid(xValue, i, 1)
    If xDic.Exists(xChar) Then
        result = Replace(xOutValue, xChar, "")
        xDic.Remove xChar
        xOutValue = result
    Else
        xDic(xChar) = ""
        xOutValue = xOutValue & xChar
    End If
Next
RemoveDuplicates1 = xOutValue
End Function

** Here is a macro in Microsoft Excel to do the cipher that turns Os into Ls and so forth:

Function OLCipher(pWorkRng1 As Range) As String
'Turn O to L and so forth (U-shaped cipher)
Dim xOLValue As String
Dim xOLChar As String
Dim xtempChar As String
Dim xOutOLValue As String
xOLValue = pWorkRng1.Value
xOLValue = LCase(xOLValue)
For i = 1 To VBA.Len(xOLValue)
    xOLChar = VBA.Mid(xOLValue, i, 1)
    xtempChar = xOLChar
    xtempChar = Replace(xtempChar, "a", "Z")
    xtempChar = Replace(xtempChar, "b", "Y")
    xtempChar = Replace(xtempChar, "c", "X")
    xtempChar = Replace(xtempChar, "d", "W")
    xtempChar = Replace(xtempChar, "e", "V")
    xtempChar = Replace(xtempChar, "f", "U")
    xtempChar = Replace(xtempChar, "g", "T")
    xtempChar = Replace(xtempChar, "h", "S")
    xtempChar = Replace(xtempChar, "i", "R")
    xtempChar = Replace(xtempChar, "j", "Q")
    xtempChar = Replace(xtempChar, "k", "P")
    xtempChar = Replace(xtempChar, "l", "O")
    xtempChar = Replace(xtempChar, "m", "N")
    xtempChar = Replace(xtempChar, "n", "M")
    xtempChar = Replace(xtempChar, "o", "L")
    xtempChar = Replace(xtempChar, "p", "K")
    xtempChar = Replace(xtempChar, "q", "J")
    xtempChar = Replace(xtempChar, "r", "I")
    xtempChar = Replace(xtempChar, "s", "H")
    xtempChar = Replace(xtempChar, "t", "G")
    xtempChar = Replace(xtempChar, "u", "F")
    xtempChar = Replace(xtempChar, "v", "E")
    xtempChar = Replace(xtempChar, "w", "D")
    xtempChar = Replace(xtempChar, "x", "C")
    xtempChar = Replace(xtempChar, "y", "B")
    xtempChar = Replace(xtempChar, "z", "A")
xOutOLValue = xOutOLValue & xtempChar
Next
OLCipher = xOutOLValue
End Function

*** Here is a macro to turn Ds into Xs (and As into Ns and so forth):

Function DXCipher(pWorkRng2 As Range) As String
'Turn A to N, D to X, and so forth (O-shaped cipher)
Dim xDXValue As String
Dim xDXChar As String
Dim xtChar As String
Dim xOutDXValue As String
xDXValue = pWorkRng2.Value
xDXValue = LCase(xDXValue)
For i = 1 To VBA.Len(xDXValue)
    xDXChar = VBA.Mid(xDXValue, i, 1)
    xtChar = xDXChar
    xtChar = Replace(xtChar, "a", "N")
    xtChar = Replace(xtChar, "b", "Z")
    xtChar = Replace(xtChar, "c", "Y")
    xtChar = Replace(xtChar, "d", "X")
    xtChar = Replace(xtChar, "e", "W")
    xtChar = Replace(xtChar, "f", "V")
    xtChar = Replace(xtChar, "g", "U")
    xtChar = Replace(xtChar, "h", "T")
    xtChar = Replace(xtChar, "i", "S")
    xtChar = Replace(xtChar, "j", "R")
    xtChar = Replace(xtChar, "k", "Q")
    xtChar = Replace(xtChar, "l", "P")
    xtChar = Replace(xtChar, "m", "O")
    xtChar = Replace(xtChar, "n", "A")
    xtChar = Replace(xtChar, "o", "M")
    xtChar = Replace(xtChar, "p", "L")
    xtChar = Replace(xtChar, "q", "K")
    xtChar = Replace(xtChar, "r", "J")
    xtChar = Replace(xtChar, "s", "I")
    xtChar = Replace(xtChar, "t", "H")
    xtChar = Replace(xtChar, "u", "G")
    xtChar = Replace(xtChar, "v", "F")
    xtChar = Replace(xtChar, "w", "E")
    xtChar = Replace(xtChar, "x", "D")
    xtChar = Replace(xtChar, "y", "C")
    xtChar = Replace(xtChar, "z", "B")
xOutDXValue = xOutDXValue & xtChar
Next
DXCipher = xOutDXValue
End Function

No comments:

Post a Comment