35108

Complexity of breaking Vigenère cipher

Question:

So I want to know what is the time complexity of deciphering a text of n words encrypted bt Vigenère.

Vigenère is just applying different Caesar shifts for each letter. I know that for a Caesar Cipher it is just O(n) Because we simply try all different 25 shifts. But what about Vigenère?

Answer1:

Breaking Ceasar's shift is O(1), not O(n). The size of the alphabet is constant. You only need to decode a short stretch of the ciphertext under a given key to know if you are on track.

For Vigenere's cipher you have sequence of repeating shifts. The brute-force way to break it without statistical analysis depends on the key space, which is O(26^k) for a key of length k. Because statistical analysis is highly effective on Vigenere's cipher, its actual strength is much lower than would be suggested by this time bound.

Recommend

  • Hiding strings in Obfuscated code
  • How to sign a custom JCE security provider
  • Updating JTable
  • How to disable TRACE/TRACK HTTP in JBoss Wildfly?
  • Local Jekyll Serve/Live Site discrepancy
  • AngularJS is breaking the routing url
  • CSS 100% height columns, but with page still scrollable
  • How to remove last utf8 char of a python string
  • How to write string.Contains(someText) in expression Tree
  • What do I do with this error when I run tests in rails?
  • Imageloader not loading image on real device
  • Add spaces between words in spaceless string
  • Messed up characters in webpages (especially social media)
  • Rails 5 - Google Maps - Javascript error - initMap is not a function - fixing one js issue creates a
  • Count New Lines in Text File
  • Rodeo UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 0: ordinal
  • Plotting densities in R
  • NUnit 3.0 TestCase const custom object arguments
  • How do I signal completion of my dataflow?
  • Convert Type Decimal to Hex (string) in .NET 3.5
  • Using a canvas object in a thread to do simple animations - Java
  • WPF ICommand CanExecute(): RaiseCanExecuteChanged() or automatic handling via DispatchTimer?
  • How solve “Qt: Untested Windows version 10.0 detected!”
  • Unable to decode certificate at client new X509Certificate2()
  • Parsing a CSV string while ignoring commas inside the individual columns
  • GridView breaks while scrolling
  • How to change the font size of a single index for UISegmentedControl?
  • Time complexity of a program which involves multiple variables
  • Atlas images wrong size on iPad iOS 9
  • Change multiple background-images with jQuery
  • Avoid links criss cross / overlap in d3.js using force layout
  • Android screen density dpi vs ppi
  • How to add a column to a Pandas dataframe made of arrays of the n-preceding values of another column
  • DirectX11 ClearRenderTargetViewback with transparent buffer?
  • Javascript Callbacks with Object constructor
  • How can I use Kendo UI with Razor?
  • Change an a tag attribute in JavaScript based on screen width
  • Convert array of 8 bytes to signed long in C++
  • Return words with double consecutive letters
  • Binding checkboxes to object values in AngularJs