• 0

VB6 Encryption


Question

I am new to Visual Basic and am wondering if someone can help me write some code.

FIRST

I am looking to write a program that will save a password in the registry. I want the password to be unique to the computer, that way if someone manages to steal it and install it on another computer, it will not function. I have managed to do this by adding the Windows Product ID in to the password cipher.

Please can you advise me if this is the best way. I don't know what else would be unique or how to read anything else.

SECOND

My cypher is crap! LOL I'm using a Cesar cipher but I want something that is stronger, a lot stronger. However, there is something more that I want. I want the encrypted text to look different each time, even if you encode the same text over and over again with the same password.

For example, if I ran the following pseudo code, exactly as it is, I'd want the output to be like what is shown below it:

Dim myText = "Hello World"
Dim myPass = "coo1" + getReg("WinID")

Print "SAMPLE OUTPUT 1:" + Encrypt(myText, myPass)
Print "SAMPLE OUTPUT 2:" + Encrypt(myText, myPass)
Print "SAMPLE OUTPUT 3:" + Encrypt(myText, myPass)
Print "SAMPLE OUTPUT 4:" + Encrypt(myText, myPass)

SAMPLE OUTPUT 1: 74588FA117611C3D8217C4656D417E54C661BA0967EAHAIAOGJODSJGB82A4C544471D4BD8674

SAMPLE OUTPUT 2: C14DF07BB8EB9BF30E37118112FE9EA428E82CACCC58E52F9C3D8217C4656D417E54C661BA09

SAMPLE OUTPUT 3: 98ABDEFAAEBFD990DC6VHHOEHDHGKAGIIR0CEC5A39A24A9F0F0E66A7D30FB952CCC3BE923F5E

SAMPLE OUTPUT 4: 31394E3BA869B82A4C544471D4B7E77FA11761656D4165AE7AFA1F17611EBFD990DC6JTREE61

I hope some one can help write some very simple code that a beginner like me could understand.

Thank you

Link to comment
https://www.neowin.net/forum/topic/773196-vb6-encryption/
Share on other sites

10 answers to this question

Recommended Posts

  • 0

Whats so hard about what M2Ys4U suggested?

Place this in a new resource called: basModExp.bas

Option Explicit
Option Base 0

' A VB6/VBA procedure to carry out modular exponentiation
' with examples of RSA encryption and Diffie-Hellman key exchange

' USAGE:
' Example: strResult = mpModExp("3c", "03", "face")
' computes (0x3c)^3 mod 0xface = 0x5b56
' or, in decimal, 60^3 mod 64206 = 23382
' Parameters may be hex strings of any length subject to limitations
' of VB and your computer. May take a long time!

' First published 23 September 2005.
' mpFromHex modified 13 October 2007.
' mpModExp fixed "0" issue 4 February 2009
'************************* COPYRIGHT NOTICE*************************
' This code was originally written in Visual Basic by David Ireland
' and is copyright (c) 2005-9 D.I. Management Services Pty Limited,
' all rights reserved.

' You are free to use this code as part of your own applications
' provided you keep this copyright notice intact and acknowledge
' its authorship with the words:

'   "Contains cryptography software by David Ireland of
'   DI Management Services Pty Ltd <www.di-mgt.com.au>;."

' If you use it as part of a web site, please include a link
' to our site in the form
' <a href="http://www.di-mgt.com.au/crypto.html">Cryptographyftware Code</a>

' This code may only be used as part of an application. It may
' not be reproduced or distributed separately by any means without
' the express written permission of the author.

' David Ireland and DI Management Services Pty Limited make no
' representations concerning either the merchantability of this
' software or the suitability of this software for any particular
' purpose. It is provided "as is" without express or implied
' warranty of any kind.

' The latest version of this source code can be downloaded from
' www.di-mgt.com.au/crypto.html.
' Comments and bug reports to http://www.di-mgt.com.au/contact.html
'****************** END OF COPYRIGHT NOTICE*************************
' *********
' * TESTS *
' *********
Public Function Test_mpModExp()
	Dim strResult As String
	strResult = mpModExp("3c", "03", "face")
	Debug.Print strResult & " (expected 5b56)"
	strResult = mpModExp("beef", "03", "1000000000000") ' beef^3 = beef cubed = OXO?
	Debug.Print strResult & " (expected 6A35DDD3C9CF)"
	strResult = mpModExp("beef", "03", "10000")
	Debug.Print strResult & " (expected C9CF)"
	' Do a mini-RSA encryption with 32-bit key:
	' Public key (n, e) = (0x5518f65d, 0x11)
	' Private key d = 0x2309cd31
	' Message m = 0x35b9a3cb
	' Encrypt c = m^e mod n = 35b9a3cb^11 mod 5518f65d = 528C41E5
	' Decrypt m' = c^e mod n = 528C41E5^2309cd31 mod 5518f65d = 35B9A3CB
	strResult = mpModExp("35b9a3cb", "11", "5518f65d")
	Debug.Print strResult & " (expected 528C41E5)"
	strResult = mpModExp("528C41E5", "2309cd31", "5518f65d")
	Debug.Print strResult & " (expected 35B9A3CB)"

End Function

Public Function Test_RSA508()
' An example of an RSA calculation using mpModExp from
' "Some Examples of the PKCS Standards",
' An RSA Laboratories Technical Note,
' Burton S. Kaliski Jr., November 1, 1993.
' RSA key is 508 bits long.
' WARNING: this may take some time!
	Dim strMod As String
	Dim strExp As String
	Dim strPri As String
	Dim strMsg As String
	Dim strSig As String
	Dim strOK As String
	Dim strVer As String

	strMod = "0A66791DC6988168" & _
		"DE7AB77419BB7FB0" & _
		"C001C62710270075" & _
		"142942E19A8D8C51" & _
		"D053B3E3782A1DE5" & _
		"DC5AF4EBE9946817" & _
		"0114A1DFE67CDC9A" & _
		"9AF55D655620BBAB"
	strExp = "010001"
	strPri = "0123C5B61BA36EDB" & _
		"1D3679904199A89E" & _
		"A80C09B9122E1400" & _
		"C09ADCF7784676D0" & _
		"1D23356A7D44D6BD" & _
		"8BD50E94BFC723FA" & _
		"87D8862B75177691" & _
		"C11D757692DF8881"
	strMsg = "1FFFFFFFFFFFF" & _
		"FFFFFFFFFFFFFFFF" & _
		"FFFFFFFFFFFFFFFF" & _
		"FFFFFFFFFF003020" & _
		"300C06082A864886" & _
		"F70D020205000410" & _
		"DCA9ECF1C15C1BD2" & _
		"66AFF9C8799365CD"
	strOK = "6DB36CB18D3475B" & _
		"9C01DB3C78952808" & _
		"0279BBAEFF2B7D55" & _
		"8ED6615987C85186" & _
		"3F8A6C2CFFBC89C3" & _
		"F75A18D96B127C71" & _
		"7D54D0D8048DA8A0" & _
		"544626D17A2A8FBE"

	' Sign, i.e. Encrypt with private key, s = m^d mod n
	Debug.Print "Calculating signature (be patient)..."
	strSig = mpModExp(strMsg, strPri, strMod)
	Debug.Print strSig
	If strSig = strOK Then
		Debug.Print "Hooray! Signature matches."
	Else
		Debug.Print "BOO! Signature was wrong."
	End If

	' Verify, i.e. Decrypt with public key m' = s^e mod n
	Debug.Print "Calculating verification (be patient)..."
	strVer = mpModExp(strSig, strExp, strMod)
	Debug.Print strVer
	If strVer = strMsg Then
		Debug.Print "Hooray! Verification was OK."
	Else
		Debug.Print "BOO! Verification failed."
	End If

End Function

Public Function Test_Diffie_Hellman()
	' A very simple example of Diffie-Hellman key exchange.
	' CAUTION: Practical use requires numbers of 1000-2000+ bits in length
	' and other checks on suitability of p and g.
	' EXPLANATION OF SIMPLE DIFFIE-HELLMAN
	' 1. Both parties agree to select and share a public generator, say, g = 3
	'	and public prime modulus  p = 0xc773218c737ec8ee993b4f2ded30f48edace915f
	' 2. Alice selects private key x = 0x849dbd59069bff80cf30d052b74beeefc285b46f
	' 3. Alice's public key is Ya = g^x mod p. Alice sends this to Bob.
	' 4. To send a concealed, shared secret key to Alice, Bob picks a secret random number
	'	say, y = 0x40a2cf7390f76c1f2eef39c33eb61fb11811d528
	' 5. Bob computes Yb = g^y mod p and sends this to Alice.
	' 6. Bob can computes the shared key k = Ya^y mod p,
	'	to use for further communications with Alice
	' 7. Alice can compute the same shared key k = Yb^x mod p,
	'	to use for further communications with Bob.
	' Note: k = Ya^y = (g^x)^y = g^(xy) = Yb^x = (g^y)^x = g^(xy) mod p
	' An eavesdropper only sees g, p, Ya and Yb.
	' It is easy to compute Y=g^x mod p but it is
	' difficult to compute x given g^x mod p.
	' This is the discrete logarithm problem.

	Dim Ya As String
	Dim Yb As String
	Dim Ka As String
	Dim Kb As String

	' Alice computes Ya = g^x mod p
	Ya = mpModExp("3", "849dbd59069bff80cf30d052b74beeefc285b46f", "c773218c737ec8ee993b4f2ded30f48edace915f")
	Debug.Print "Ya = " & Ya
	' Bob computes Yb = g^y mod p
	Yb = mpModExp("3", "40a2cf7390f76c1f2eef39c33eb61fb11811d528", "c773218c737ec8ee993b4f2ded30f48edace915f")
	Debug.Print "Yb = " & Yb
	' Alice computes the secret key k = Yb^x mod p
	Ka = mpModExp(Yb, "849dbd59069bff80cf30d052b74beeefc285b46f", "c773218c737ec8ee993b4f2ded30f48edace915f")
	Debug.Print "Ka = " & Ka
	' Bob computes the secret key k = Ya^y mod p
	Kb = mpModExp(Ya, "40a2cf7390f76c1f2eef39c33eb61fb11811d528", "c773218c737ec8ee993b4f2ded30f48edace915f")
	Debug.Print "Kb = " & Kb
	If Ka <> Kb Then
		Debug.Print "ERROR: keys do not match!"
	Else
		Debug.Print "Keys match OK."
	End If

End Function


' *********************
' * EXPORTED FUNCTION *
' *********************

Public Function mpModExp(strBaseHex As String, strExponentHex As String, strModulusHex As String) As String
' Computes b^e mod m given input (b, e, m) in hex format.
' Returns result as a hex string with all leading zeroes removed.

' Store numbers as byte arrays with
' least-significant byte in x[len-1]
' and most-significant byte in x[1]
' x[0] is initially zero and is used for overflow

	Dim abBase() As Byte
	Dim abExponent() As Byte
	Dim abModulus() As Byte
	Dim abResult() As Byte
	Dim nLen As Integer
	Dim n As Integer

	' Convert hex strings to arrays of bytes
	abBase = mpFromHex(strBaseHex)
	abExponent = mpFromHex(strExponentHex)
	abModulus = mpFromHex(strModulusHex)

	' We require all byte arrays to be the same length
	' with the first byte left as zero
	nLen = UBound(abModulus) + 1
	n = UBound(abExponent) + 1
	If n > nLen Then nLen = n
	n = UBound(abBase) + 1
	If n > nLen Then nLen = n
	Call FixArrayDim(abModulus, nLen)
	Call FixArrayDim(abExponent, nLen)
	Call FixArrayDim(abBase, nLen)
	'''Debug.Print "b=" & mpToHex(abBase)
	'''Debug.Print "e=" & mpToHex(abExponent)
	'''Debug.Print "m=" & mpToHex(abModulus)

	' Do the business
	abResult = aModExp(abBase, abExponent, abModulus, nLen)

	' Convert result to hex
	mpModExp = mpToHex(abResult)
	'''Debug.Print "r=" & mpModExp
	' Strip leading zeroes
	For n = 1 To Len(mpModExp)
		If Mid$(mpModExp, n, 1) <> "0" Then
			Exit For
		End If
	Next
	' FIX: [2009-02-04] Changed from >= to >
	If n > Len(mpModExp) Then
		' Answer is zero
		mpModExp = "0"
	ElseIf n > 1 Then
		' Zeroes to strip
		mpModExp = Mid$(mpModExp, n)
	End If

End Function

' **********************
' * INTERNAL FUNCTIONS *
' **********************
Public Function aModExp(abBase() As Byte, abExponent() As Byte, abModulus() As Byte, nLen As Integer) As Variant
' Computes a = b^e mod m and returns the result in a byte array as a VARIANT
	Dim a() As Byte
	Dim e() As Byte
	Dim s() As Byte
	Dim nBits As Long

	' Perform right-to-left binary exponentiation
	' 1. Set A = 1, S = b
	ReDim a(nLen - 1)
	a(nLen - 1) = 1
	' NB s and e are trashed so use copies
	s = abBase
	e = abExponent
	' 2. While e != 0 do:
	For nBits = nLen * 8 To 1 Step -1
		' 2.1 if e is odd then A = A*S mod m
		If (e(nLen - 1) And &H1) <> 0 Then
			a = aModMult(a, s, abModulus, nLen)
		End If
		' 2.2 e = e / 2
		Call DivideByTwo(e)
		' 2.3 if e != 0 then S = S*S mod m
		If aIsZero(e, nLen) Then Exit For
		s = aModMult(s, s, abModulus, nLen)
		DoEvents
	Next

	' 3. Return(A)
	aModExp = a

End Function

Private Function aModMult(abX() As Byte, abY() As Byte, abMod() As Byte, nLen As Integer) As Variant
' Returns w = (x * y) mod m
	Dim w() As Byte
	Dim x() As Byte
	Dim y() As Byte
	Dim nBits As Integer

	' 1. Set w = 0, and temps x = abX, y = abY
	ReDim w(nLen - 1)
	x = abX
	y = abY
	' 2. From LS bit to MS bit of X do:
	For nBits = nLen * 8 To 1 Step -1
		' 2.1 if x is odd then w = (w + y) mod m
		If (x(nLen - 1) And &H1) <> 0 Then
			Call aModAdd(w, y, abMod, nLen)
		End If
		' 2.2 x = x / 2
		Call DivideByTwo(x)
		' 2.3 if x != 0 then y = (y + y) mod m
		If aIsZero(x, nLen) Then Exit For
		Call aModAdd(y, y, abMod, nLen)
	Next
	aModMult = w

End Function

Private Function aIsZero(a() As Byte, ByVal nLen As Integer) As Boolean
' Returns true if a is zero
	aIsZero = True
	Do While nLen > 0
		If a(nLen - 1) <> 0 Then
			aIsZero = False
			Exit Do
		End If
		nLen = nLen - 1
	Loop
End Function

Private Sub aModAdd(a() As Byte, b() As Byte, m() As Byte, nLen As Integer)
' Computes a = (a + b) mod m
	Dim i As Integer
	Dim d As Long
	' 1. Add a = a + b
	d = 0
	For i = nLen - 1 To 0 Step -1
		d = CLng(a(i)) + CLng(b(i)) + d
		a(i) = CByte(d And &HFF)
		d = d \ &H100
	Next
	' 2. If a > m then a = a - m
	For i = 0 To nLen - 2
		If a(i) <> m(i) Then
			Exit For
		End If
	Next
	If a(i) >= m(i) Then
		Call aSubtract(a, m, nLen)
	End If
	' 3. Return a in-situ

End Sub

Private Sub aSubtract(a() As Byte, b() As Byte, nLen As Integer)
' Computes a = a - b
	Dim i As Integer
	Dim borrow As Long
	Dim d As Long   ' NB d is signed

	borrow = 0
	For i = nLen - 1 To 0 Step -1
		d = CLng(a(i)) - CLng(b(i)) - borrow
		If d < 0 Then
			d = d + &H100
			borrow = 1
		Else
			borrow = 0
		End If
		a(i) = CByte(d And &HFF)
	Next

End Sub

Private Sub DivideByTwo(ByRef x() As Byte)
' Divides multiple-precision integer x by 2 by shifting to right by one bit
	Dim d As Long
	Dim i As Integer
	d = 0
	For i = 0 To UBound(x)
		d = d Or x(i)
		x(i) = CByte((d \ 2) And &HFF)
		If (d And &H1) Then
			d = &H100
		Else
			d = 0
		End If
	Next
End Sub

Public Function mpToHex(abNum() As Byte) As String
' Returns a string containg the mp number abNum encoded in hex
' with leading zeroes trimmed.
	Dim i As Integer
	Dim sHex As String
	sHex = ""
	For i = 0 To UBound(abNum)
		If abNum(i) < &H10 Then
			sHex = sHex & "0" & Hex(abNum(i))
		Else
			sHex = sHex & Hex(abNum(i))
		End If
	Next
	mpToHex = sHex
End Function

Public Function mpFromHex(ByVal strHex As String) As Variant
' Converts number encoded in hex in big-endian order to a multi-precision integer
' Returns an array of bytes as a VARIANT
' containing number in big-endian order
' but with the first byte always zero
' strHex must only contain valid hex digits [0-9A-Fa-f]
' [2007-10-13] Changed direct >= <= comparisons with strings.
	Dim abData() As Byte
	Dim ib As Long
	Dim ic As Long
	Dim ch As String
	Dim nch As Long
	Dim nLen As Long
	Dim t As Long
	Dim v As Long
	Dim j As Integer

	' Cope with odd # of digits, e.g. "fed" => "0fed"
	If Len(strHex) Mod 2 > 0 Then
		strHex = "0" & strHex
	End If
	nLen = Len(strHex) \ 2 + 1
	ReDim abData(nLen - 1)
	ib = 1
	j = 0
	For ic = 1 To Len(strHex)
		ch = Mid$(strHex, ic, 1)
		nch = Asc(ch)
		''If ch >= "0" And ch <= "9" Then
		If nch >= &H30 And nch <= &H39 Then
			''t = Asc(ch) - Asc("0")
			t = nch - &H30
		''ElseIf ch >= "a" And ch <= "f" Then
		ElseIf nch >= &H61 And nch <= &H66 Then
			''t = Asc(ch) - Asc("a") + 10
			t = nch - &H61 + 10
		''ElseIf ch >= "A" And ch <= "F" Then
		ElseIf nch >= &H41 And nch <= &H46 Then
			''t = Asc(ch) - Asc("A") + 10
			t = nch - &H41 + 10
		Else
			' Invalid digit
			' Flag error?
			Debug.Print "ERROR: Invalid Hex character found!"
			Exit Function
		End If
		' Store byte value on every alternate digit
		If j = 0 Then
			' v = t << 8
			v = t * &H10
			j = 1
		Else
			' b[i] = (v | t) & 0xff
			abData(ib) = CByte((v Or t) And &HFF)
			ib = ib + 1
			j = 0
		End If
	Next

	mpFromHex = abData
End Function

Private Sub FixArrayDim(ByRef abData() As Byte, ByVal nLen As Long)
' Redim abData to be nLen bytes long with existing contents
' aligned at the RHS of the extended array
	Dim oLen As Long
	Dim i As Long

	oLen = UBound(abData) + 1
	If oLen > nLen Then
		' Truncate
		ReDim Preserve abData(nLen - 1)
	ElseIf oLen < nLen Then
		' Shift right
		ReDim Preserve abData(nLen - 1)
		For i = oLen - 1 To 0 Step -1
			abData(i + nLen - oLen) = abData(i)
		Next
		For i = 0 To nLen - oLen - 1
			abData(i) = 0
		Next
	End If

End Sub

Public Function TestConvFromHex()
	Dim abData() As Byte

	abData = mpFromHex("deadbeef")
	Debug.Print mpToHex(abData)
	abData = mpFromHex("FfeE01")
	Debug.Print mpToHex(abData)
	abData = mpFromHex("1")
	Debug.Print mpToHex(abData)

End Function

And then call it within your code. The way I would test it is you create a textbox, make the code to place the text:

strResult = mpModExp("3c", "03", "face")

Just like it said on the article, you can use this example with the inclusion of the users Windows Product ID.

' Encrypt c = m^e mod n
strResult = mpModExp("35b9a3cb", "11", "5518f65d")
Debug.Print strResult & " (expected 528C41E5)"
' Decrypt m' = c^d mod n
strResult = mpModExp("528C41E5", "2309cd31", "5518f65d")
Debug.Print strResult & " (expected 35B9A3CB)"

But to be honest, why not call the System ID instead? It's more unique, and can be a little bit more difficult to spoof.

Link to comment
https://www.neowin.net/forum/topic/773196-vb6-encryption/#findComment-591008924
Share on other sites

  • 0

I've done something similar to what you're after. The trick that I used was to use a random number generator to "pick" which of my encryption methodologies to use, and encode that random number at the beginning of your encryption string, using a fixed number of bytes and fixed encryption to "hide" your key for decryption. Then I read and decode the header which tells my dll how to decrypt the rest of the string.

This method has proven to be fairly secure so far, but as with anything worth securing, someone will eventually break it.

As for the VB.NET methodologies being slow, you have to remember that it is a Just-In-Time language, so it has to translate the MSIL code generated at app compile time down to machine code, as it's needed. Plus if you're trying to secure things, you'll want a good obfuscation tool to make it more difficult to reflect the code and see what you're doing.

Link to comment
https://www.neowin.net/forum/topic/773196-vb6-encryption/#findComment-591011624
Share on other sites

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • LibreOffice 25.2.4 by Razvan Serea LibreOffice is the free power-packed Open Source personal productivity suite for Windows, Macintosh and Linux, that gives you six feature-rich applications for all your document production and data processing needs: Writer, Calc, Impress, Draw, Math and Base. Support and documentation is free from our large, dedicated community of users, contributors and developers. You, too, can also get involved! Choosing Between LibreOffice Still and LibreOffice Fresh: LibreOffice Still is a good choice if you value stability, a longer support cycle, and a more conservative approach to software updates. It's suitable for businesses and organizations where reliability and compatibility are crucial. LibreOffice Fresh is ideal if you're an enthusiast or an early adopter who wants to stay on the cutting edge of LibreOffice development and is willing to accept more frequent updates and occasional minor issues. Features: Writer is the word processor inside LibreOffice. Use it for everything, from dashing off a quick letter to producing an entire book with tables of contents, embedded illustrations, bibliographies and diagrams. The while-you-type auto-completion, auto-formatting and automatic spelling checking make difficult tasks easy (but are easy to disable if you prefer). Writer is powerful enough to tackle desktop publishing tasks such as creating multi-column newsletters and brochures. The only limit is your imagination. Calc tames your numbers and helps with difficult decisions when you're weighing the alternatives. Analyze your data with Calc and then use it to present your final output. Charts and analysis tools help bring transparency to your conclusions. A fully-integrated help system makes easier work of entering complex formulas. Add data from external databases such as SQL or Oracle, then sort and filter them to produce statistical analyses. Use the graphing functions to display large number of 2D and 3D graphics from 13 categories, including line, area, bar, pie, X-Y, and net - with the dozens of variations available, you're sure to find one that suits your project. Impress is the fastest and easiest way to create effective multimedia presentations. Stunning animation and sensational special effects help you convince your audience. Create presentations that look even more professional than the standard presentations you commonly see at work. Get your collegues' and bosses' attention by creating something a little bit different. Draw lets you build diagrams and sketches from scratch. A picture is worth a thousand words, so why not try something simple with box and line diagrams? Or else go further and easily build dynamic 3D illustrations and special effects. It's as simple or as powerful as you want it to be. Base is the database front-end of the LibreOffice suite. With Base, you can seamlessly integrate into your existing database structures. Based on imported and linked tables and queries from MySQL, PostgreSQL or Microsoft Access and many other data sources, you can build powerful databases containing forms, reports, views and queries. Full integration is possible with the in-built HSQL database. Math is a simple equation editor that lets you lay-out and display your mathematical, chemical, electrical or scientific equations quickly in standard written notation. Even the most-complex calculations can be understandable when displayed correctly. E=mc2. LibreOffice also comes configured with a PDF file creator, meaning you can distribute documents that you're sure can be opened and read by users of almost any computing device or operating system. LibreOffice also comes configured with a PDF file creator, meaning you can distribute documents that you're sure can be opened and read by users of almost any computing device or operating system. Download: LibreOffice 64-bit | LibreOffice 32-bit ~300.0 MB (Open Source) View: LibreOffice Website | Screenshot | Release Notes Get alerted to all of our Software updates on Twitter at @NeowinSoftware
    • I'm not sure why, but for some reason I think that if they are deciding to use the year for the version history they should use the whole year (i.e. iOS 2026).
    • Here's why it makes sense to name it iOS 26 and why it doesn't by Aditya Tiwari It has been almost 18 years since Apple launched the first version of its popular mobile operating system alongside the original iPhone. Recent reports and rumors circulating on the web suggest that the company is all set to unveil a major overhaul for iOS 19 at this year's WWDC keynote. There is something that baffled many when they found that the Cupertino giant is reportedly planning to rename iOS 19 to iOS 26. Yes, a company like Apple skipping eight versions for iOS is enough to leave users with a "why?" expression on their face. However, even if Apple pulls it off, there are two sides to the coin. Why it makes sense to call it iOS 26 There are several reasons why calling it iOS 26 instead of iOS 19 isn't as weird as it sounds. To begin with, it's something that has been done in the past. Samsung is a well-known example when we think about renaming device lineups and skipping version numbers. Samsung launched the Galaxy S20 series in 2020. But what was its predecessor? Galaxy S19? No, it was the Galaxy S10. The South Korean giant renamed its device lineup and aligned it with the year of launch, jumping ten versions in the process. So, someone viewing a Galaxy S23 can easily determine that the device was launched in 2023. It also gives them a feeling that they are using the 'latest and greatest' product. On the flip side, a device from the previous year may feel outdated, potentially motivating them to upgrade. Skipping version numbers isn't fun and games for everyone. Microsoft became the butt of jokes when it skipped Windows 9 and announced that Windows 8.1 will be upgraded to Windows 10 (that too in 2015). Windows 10 was thought to be "the last version of Windows", but things turned out differently. Apple's case would be a bit different, where the iOS version number is one year ahead. So, iOS 26 will release in 2025, iOS 27 in 2026, and so on. This approach is similar to how game companies like Electronic Arts name their gaming titles. Although it may seem off track, the naming scheme aligns with Apple's development schedule. The company typically announces new iOS versions at WWDC in June and rolls them out to the public in the fall season. After that, it continues to push incremental updates through the following year. In other words, a particular iOS version lives on your iPhone for a quarter of the launch year and about nine to ten months in the following year. Meanwhile, Samsung releases new Galaxy S devices at the start of the year, so it makes more sense to align their name with the current year. Not just iOS 26, reports said that Apple will streamline its confusing software naming system by renaming almost all of its operating systems to a single version. So, there will be iPadOS 26, macOS 26, tvOS 26, and watchOS 26 instead of iPadOS 19, macOS 16, tvOS 12, and so on. While the big move will make things easier for users, it will also highlight the work Apple has been doing to unify its software experience across devices. iOS and iPadOS have been related to each other from the beginning, but macOS gained ARM support in 2020 and began incorporating iOS-like UI elements. Apple has already developed a suite of Continuity features that enable different Apple devices to work together. macOS 14 Sonoma further bridged the gap between iPhone and Mac in 2023 with a revamped widgets picker UI, which allows access to and syncing with widgets stored on your iPhone. New widgets introduced in macOS 14 are interactive, similar to those on iPhone. They let you do stuff like checking off reminders, playing or pausing media, accessing smart home controls, and more. Apple's iOS 26/iOS 19 would be the second major naming shake-up in the history of iOS. The first one was when Apple renamed the operating system from iPhone OS to iOS in June 2010. iOS 26 is expected to be the biggest update in years, reportedly featuring a 'dramatic' glass-like UI overhaul, a revamped Camera app, live translation for AirPods, a new gaming app, and a new set of accessibility features. The glass-like design, first introduced on Apple's Vision Pro headset, is expected to make its way to tvOS and watchOS. Why doesn't it make sense to call it iOS 26 It already feels a bit awkward when you realize that the iPhone 16 runs iOS 18, for whatever reason, when the first iterations of both iPhone and iOS arrived in the same year. Adding eight more digits to the iOS version number will make it sound even weirder. The 19th generation of iPhone's operating system will be called iOS 26. Imagine buying an iPhone 17 later this year, and it runs iOS 26 out of the box. However, there are a couple of things Apple can do to tone down the awkwardness. Perhaps Apple can rename the iPhone series and start calling it iPhone 26 to match its software counterpart. A far-fetched and even more unlikely option is to drop version numbers from the iPhone's name entirely. Apple is already doing it for its tablets (iPad, iPad Pro, and iPad Air) and its Mac computers. Therefore, it won't be an issue once the users absorb the initial shock of the announcement. But we can't ignore that not having a version number tied to a product has its downsides. These are all speculations anyway. Whatever happens, Apple fans will get over it and learn to live with it, like they are living with the hopes of an upgraded Siri and AirPower to charge their Apple devices together.
    • I'd prefer the disclaimer being more transparent by putting it above the article.
    • dBpoweramp Music Converter 2025-06-05 by Razvan Serea Audio conversion perfected, effortlessly convert between formats. dBpoweramp contains a multitude of audio tools in one: CD Ripper, Music Converter, Batch Converter, ID Tag Editor and Windows audio shell enhancements. Preloaded with essential codecs (mp3, wave, FLAC, m4a, Apple Lossless, AIFF), additional codecs can be installed from [Codec Central], as well as Utility Codecs which perform actions on audio files. After 21 days the trial will end, reverting to dBpoweramp Free edition (learn the difference between Reference and dBpoweramp Free, here). dBpoweramp is compatible with Windows 10, 8, 7, Vista, both 32 and 64 bit. dBpoweramp Music Converter features: Convert audio files with elegant simplicity. mp3, mp4, m4a (iTunes / iPod), Windows Media Audio (WMA), Ogg Vorbis, AAC, Monkeys Audio, FLAC, Apple Lossless (ALAC) to name a few! Multi CPU Encoding Support Rip digitally record audio CDs (with CD Ripper) Batch Convert large numbers of files with 1 click Windows Integration popup info tips, audio properties, columns, edit ID-Tags DSP Effects such as Volume Normalize, or Graphic EQ [Power Pack Option] Command Line Encoding: invoke the encoder from the command line DSP Effects - process the audio with Volume Normalize, or Sample / Bit Rate Conversion, with over 30 effects dBpoweramp is a fully featured mp3 Converter dBpoweramp integrates into Windows Explorer, an mp3 converter that is as simple as right clicking on the source file >> Convert To. Popup info tips, Edit ID-Tags are all provided. dBpoweramp Music Converter 2025.06.05 changelog: Darkmode added Core Converter Debug log dumps ID Tags written VST Effect Folders dialog fixed missing InitCommonControls would not show correctly FLAC/Ogg/Opus/etc - allows editing of CDTOC ID Tag CD Ripper secure ripping log where shows TOC was not showing CD Extra correctly CD Ripper was incorrectly setting data track length on main display (for certain drives) CD Ripper internally better handling of corrupt TOCs CD TOC to Tag was incorrectly adding 150 to CD Extra disc CD Ripper shows "AccurateRip Unconfigured" in rip status rather than "not in accuraterip" if unconfigured CD Ripper art paste accepts https CueSheet added as standard - log file written to same folder as cue and folder.jpg AIFF internal code merge (macos >> windows) Download: dBpoweramp Music Converter R2025.06.05 | 82.2 MB (Shareware) View: dBpowerAMP Music Converter Website | Screenshot Get alerted to all of our Software updates on Twitter at @NeowinSoftware
  • Recent Achievements

    • Week One Done
      abortretryfail earned a badge
      Week One Done
    • First Post
      Mr bot earned a badge
      First Post
    • First Post
      Bkl211 earned a badge
      First Post
    • One Year In
      Mido gaber earned a badge
      One Year In
    • One Year In
      Vladimir Migunov earned a badge
      One Year In
  • Popular Contributors

    1. 1
      +primortal
      496
    2. 2
      snowy owl
      254
    3. 3
      +FloatingFatMan
      252
    4. 4
      ATLien_0
      228
    5. 5
      +Edouard
      192
  • Tell a friend

    Love Neowin? Tell a friend!