Input length must be multiple of 8 when decrypting with padded cipher
I got this Client-Server app : Encrypting a message in side and decrypting it in the other Side
but in decrypting i get this Error " Input length must be multiple of 8 when decrypting with padded cipher "
the Server Class
public class ServerApp
public static byte encrypt(String input, Key k)
try
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, k);
byte data = input.getBytes();
byte result = cipher.doFinal(data);
return result;
catch (Exception ex)
return null;
public static String decrypt(byte cipher, Key k)
try
Cipher cipher1 = Cipher.getInstance("DES");
cipher1.init(Cipher.DECRYPT_MODE, k);
byte original = cipher1.doFinal(cipher);
return new String(original);
catch (Exception ex)
return null;
//Logger.getLogger(DES.class.getName()).log(Level.SEVERE, null, ex);
public static void main(String args) throws NoSuchAlgorithmException
try
Key key=KeyGen.getSecretKey();
ServerSocket ser = new ServerSocket(3333);
System.out.println("Server Started");
Socket client = ser.accept();
DataInputStream in = new DataInputStream(client.getInputStream());
DataOutputStream out = new DataOutputStream(client.getOutputStream());
Scanner scan = new Scanner(System.in);
// SecretSocket sc = new SecretSocket(client, KeyGen.getSecretKey());
String serMsg, cliMsg, plain;
// OutputStream sout = sc.getOutputStream();
// InputStream sin = sc.getInputStream();
do
System.out.print("You say: ");
serMsg = scan.nextLine();
// sout.write(serMsg.getBytes());
// System.out.println("cli server "+sin.read());
byte ci = encrypt(serMsg, KeyGen.getSecretKey());
System.out.println("encrypt " +ci.toString());
out.writeUTF(ci.toString());
plain = decrypt(ci, KeyGen.getSecretKey() );
System.out.println("decrypt " + plain);
while (!serMsg.equals("end"));
client.close();
ser.close();
catch (IOException ex)
Logger.getLogger(ServerApp.class.getName()).log(Level.SEVERE, null, ex);
and here is the Client Code
public class ClientApp {
public static byte encrypt(String input, Key k)
try
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, k);
byte data = input.getBytes();
byte result = cipher.doFinal(data);
return result;
catch (Exception ex)
return null;
public static String decrypt(byte cipher, Key k)
try
Cipher cipher1 = Cipher.getInstance("DES/CBC/PKCS5Padding");
cipher1.init(Cipher.DECRYPT_MODE, k);
byte original = cipher1.doFinal(cipher);
return new String(original);
catch (Exception ex)
return null;
//Logger.getLogger(DES.class.getName()).log(Level.SEVERE, null, ex);
public static void main(String args) throws NoSuchAlgorithmException, InvalidKeyException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException
try
Socket s = new Socket("localhost", 3333);
DataInputStream in = new DataInputStream(s.getInputStream());
DataOutputStream out = new DataOutputStream(s.getOutputStream());
Scanner scan = new Scanner(System.in);
String serMsg, cliMsg, plain;
do
System.out.println("server server "+in.readUTF());
serMsg = in.readUTF();
System.out.println("enc: " + serMsg);
plain = decrypt(serMsg.getBytes("UTF-8"), KeyGen.getSecretKey());
System.out.println("Server says: " + plain);
while (!serMsg.equals("end"));
s.close();
catch (IOException ex)
Logger.getLogger(ClientApp.class.getName()).log(Level.SEVERE, null, ex);
the thing is i tried ("DES/CBC/PKCS5Padding") and ("UTF-8")
but still the Same Problem
Any help ??
java encryption utf-8 data-security
add a comment |
I got this Client-Server app : Encrypting a message in side and decrypting it in the other Side
but in decrypting i get this Error " Input length must be multiple of 8 when decrypting with padded cipher "
the Server Class
public class ServerApp
public static byte encrypt(String input, Key k)
try
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, k);
byte data = input.getBytes();
byte result = cipher.doFinal(data);
return result;
catch (Exception ex)
return null;
public static String decrypt(byte cipher, Key k)
try
Cipher cipher1 = Cipher.getInstance("DES");
cipher1.init(Cipher.DECRYPT_MODE, k);
byte original = cipher1.doFinal(cipher);
return new String(original);
catch (Exception ex)
return null;
//Logger.getLogger(DES.class.getName()).log(Level.SEVERE, null, ex);
public static void main(String args) throws NoSuchAlgorithmException
try
Key key=KeyGen.getSecretKey();
ServerSocket ser = new ServerSocket(3333);
System.out.println("Server Started");
Socket client = ser.accept();
DataInputStream in = new DataInputStream(client.getInputStream());
DataOutputStream out = new DataOutputStream(client.getOutputStream());
Scanner scan = new Scanner(System.in);
// SecretSocket sc = new SecretSocket(client, KeyGen.getSecretKey());
String serMsg, cliMsg, plain;
// OutputStream sout = sc.getOutputStream();
// InputStream sin = sc.getInputStream();
do
System.out.print("You say: ");
serMsg = scan.nextLine();
// sout.write(serMsg.getBytes());
// System.out.println("cli server "+sin.read());
byte ci = encrypt(serMsg, KeyGen.getSecretKey());
System.out.println("encrypt " +ci.toString());
out.writeUTF(ci.toString());
plain = decrypt(ci, KeyGen.getSecretKey() );
System.out.println("decrypt " + plain);
while (!serMsg.equals("end"));
client.close();
ser.close();
catch (IOException ex)
Logger.getLogger(ServerApp.class.getName()).log(Level.SEVERE, null, ex);
and here is the Client Code
public class ClientApp {
public static byte encrypt(String input, Key k)
try
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, k);
byte data = input.getBytes();
byte result = cipher.doFinal(data);
return result;
catch (Exception ex)
return null;
public static String decrypt(byte cipher, Key k)
try
Cipher cipher1 = Cipher.getInstance("DES/CBC/PKCS5Padding");
cipher1.init(Cipher.DECRYPT_MODE, k);
byte original = cipher1.doFinal(cipher);
return new String(original);
catch (Exception ex)
return null;
//Logger.getLogger(DES.class.getName()).log(Level.SEVERE, null, ex);
public static void main(String args) throws NoSuchAlgorithmException, InvalidKeyException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException
try
Socket s = new Socket("localhost", 3333);
DataInputStream in = new DataInputStream(s.getInputStream());
DataOutputStream out = new DataOutputStream(s.getOutputStream());
Scanner scan = new Scanner(System.in);
String serMsg, cliMsg, plain;
do
System.out.println("server server "+in.readUTF());
serMsg = in.readUTF();
System.out.println("enc: " + serMsg);
plain = decrypt(serMsg.getBytes("UTF-8"), KeyGen.getSecretKey());
System.out.println("Server says: " + plain);
while (!serMsg.equals("end"));
s.close();
catch (IOException ex)
Logger.getLogger(ClientApp.class.getName()).log(Level.SEVERE, null, ex);
the thing is i tried ("DES/CBC/PKCS5Padding") and ("UTF-8")
but still the Same Problem
Any help ??
java encryption utf-8 data-security
add a comment |
I got this Client-Server app : Encrypting a message in side and decrypting it in the other Side
but in decrypting i get this Error " Input length must be multiple of 8 when decrypting with padded cipher "
the Server Class
public class ServerApp
public static byte encrypt(String input, Key k)
try
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, k);
byte data = input.getBytes();
byte result = cipher.doFinal(data);
return result;
catch (Exception ex)
return null;
public static String decrypt(byte cipher, Key k)
try
Cipher cipher1 = Cipher.getInstance("DES");
cipher1.init(Cipher.DECRYPT_MODE, k);
byte original = cipher1.doFinal(cipher);
return new String(original);
catch (Exception ex)
return null;
//Logger.getLogger(DES.class.getName()).log(Level.SEVERE, null, ex);
public static void main(String args) throws NoSuchAlgorithmException
try
Key key=KeyGen.getSecretKey();
ServerSocket ser = new ServerSocket(3333);
System.out.println("Server Started");
Socket client = ser.accept();
DataInputStream in = new DataInputStream(client.getInputStream());
DataOutputStream out = new DataOutputStream(client.getOutputStream());
Scanner scan = new Scanner(System.in);
// SecretSocket sc = new SecretSocket(client, KeyGen.getSecretKey());
String serMsg, cliMsg, plain;
// OutputStream sout = sc.getOutputStream();
// InputStream sin = sc.getInputStream();
do
System.out.print("You say: ");
serMsg = scan.nextLine();
// sout.write(serMsg.getBytes());
// System.out.println("cli server "+sin.read());
byte ci = encrypt(serMsg, KeyGen.getSecretKey());
System.out.println("encrypt " +ci.toString());
out.writeUTF(ci.toString());
plain = decrypt(ci, KeyGen.getSecretKey() );
System.out.println("decrypt " + plain);
while (!serMsg.equals("end"));
client.close();
ser.close();
catch (IOException ex)
Logger.getLogger(ServerApp.class.getName()).log(Level.SEVERE, null, ex);
and here is the Client Code
public class ClientApp {
public static byte encrypt(String input, Key k)
try
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, k);
byte data = input.getBytes();
byte result = cipher.doFinal(data);
return result;
catch (Exception ex)
return null;
public static String decrypt(byte cipher, Key k)
try
Cipher cipher1 = Cipher.getInstance("DES/CBC/PKCS5Padding");
cipher1.init(Cipher.DECRYPT_MODE, k);
byte original = cipher1.doFinal(cipher);
return new String(original);
catch (Exception ex)
return null;
//Logger.getLogger(DES.class.getName()).log(Level.SEVERE, null, ex);
public static void main(String args) throws NoSuchAlgorithmException, InvalidKeyException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException
try
Socket s = new Socket("localhost", 3333);
DataInputStream in = new DataInputStream(s.getInputStream());
DataOutputStream out = new DataOutputStream(s.getOutputStream());
Scanner scan = new Scanner(System.in);
String serMsg, cliMsg, plain;
do
System.out.println("server server "+in.readUTF());
serMsg = in.readUTF();
System.out.println("enc: " + serMsg);
plain = decrypt(serMsg.getBytes("UTF-8"), KeyGen.getSecretKey());
System.out.println("Server says: " + plain);
while (!serMsg.equals("end"));
s.close();
catch (IOException ex)
Logger.getLogger(ClientApp.class.getName()).log(Level.SEVERE, null, ex);
the thing is i tried ("DES/CBC/PKCS5Padding") and ("UTF-8")
but still the Same Problem
Any help ??
java encryption utf-8 data-security
I got this Client-Server app : Encrypting a message in side and decrypting it in the other Side
but in decrypting i get this Error " Input length must be multiple of 8 when decrypting with padded cipher "
the Server Class
public class ServerApp
public static byte encrypt(String input, Key k)
try
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, k);
byte data = input.getBytes();
byte result = cipher.doFinal(data);
return result;
catch (Exception ex)
return null;
public static String decrypt(byte cipher, Key k)
try
Cipher cipher1 = Cipher.getInstance("DES");
cipher1.init(Cipher.DECRYPT_MODE, k);
byte original = cipher1.doFinal(cipher);
return new String(original);
catch (Exception ex)
return null;
//Logger.getLogger(DES.class.getName()).log(Level.SEVERE, null, ex);
public static void main(String args) throws NoSuchAlgorithmException
try
Key key=KeyGen.getSecretKey();
ServerSocket ser = new ServerSocket(3333);
System.out.println("Server Started");
Socket client = ser.accept();
DataInputStream in = new DataInputStream(client.getInputStream());
DataOutputStream out = new DataOutputStream(client.getOutputStream());
Scanner scan = new Scanner(System.in);
// SecretSocket sc = new SecretSocket(client, KeyGen.getSecretKey());
String serMsg, cliMsg, plain;
// OutputStream sout = sc.getOutputStream();
// InputStream sin = sc.getInputStream();
do
System.out.print("You say: ");
serMsg = scan.nextLine();
// sout.write(serMsg.getBytes());
// System.out.println("cli server "+sin.read());
byte ci = encrypt(serMsg, KeyGen.getSecretKey());
System.out.println("encrypt " +ci.toString());
out.writeUTF(ci.toString());
plain = decrypt(ci, KeyGen.getSecretKey() );
System.out.println("decrypt " + plain);
while (!serMsg.equals("end"));
client.close();
ser.close();
catch (IOException ex)
Logger.getLogger(ServerApp.class.getName()).log(Level.SEVERE, null, ex);
and here is the Client Code
public class ClientApp {
public static byte encrypt(String input, Key k)
try
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, k);
byte data = input.getBytes();
byte result = cipher.doFinal(data);
return result;
catch (Exception ex)
return null;
public static String decrypt(byte cipher, Key k)
try
Cipher cipher1 = Cipher.getInstance("DES/CBC/PKCS5Padding");
cipher1.init(Cipher.DECRYPT_MODE, k);
byte original = cipher1.doFinal(cipher);
return new String(original);
catch (Exception ex)
return null;
//Logger.getLogger(DES.class.getName()).log(Level.SEVERE, null, ex);
public static void main(String args) throws NoSuchAlgorithmException, InvalidKeyException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException
try
Socket s = new Socket("localhost", 3333);
DataInputStream in = new DataInputStream(s.getInputStream());
DataOutputStream out = new DataOutputStream(s.getOutputStream());
Scanner scan = new Scanner(System.in);
String serMsg, cliMsg, plain;
do
System.out.println("server server "+in.readUTF());
serMsg = in.readUTF();
System.out.println("enc: " + serMsg);
plain = decrypt(serMsg.getBytes("UTF-8"), KeyGen.getSecretKey());
System.out.println("Server says: " + plain);
while (!serMsg.equals("end"));
s.close();
catch (IOException ex)
Logger.getLogger(ClientApp.class.getName()).log(Level.SEVERE, null, ex);
the thing is i tried ("DES/CBC/PKCS5Padding") and ("UTF-8")
but still the Same Problem
Any help ??
java encryption utf-8 data-security
java encryption utf-8 data-security
edited Nov 12 '18 at 1:05
TrebuchetMS
2,64811023
2,64811023
asked Nov 12 '18 at 0:57
Raghad MadwarRaghad Madwar
11
11
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, k);
byte data = input.getBytes();
byte result = cipher.doFinal(data);
Using
DES
without IV you are implicitly usingDES/ECB/PKCS5Padding
.do not print a byte array directly. Java will output only printable characters. Always encode and decode a byte array when printing (Hex or Base64 are the most common encodings)
Here is an example project
Base64.getEncoder().encodeToString(byteArray)
- I hope you are aware DES is considered a weak cipher today and should be used only for backward compatibility.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53254779%2finput-length-must-be-multiple-of-8-when-decrypting-with-padded-cipher%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, k);
byte data = input.getBytes();
byte result = cipher.doFinal(data);
Using
DES
without IV you are implicitly usingDES/ECB/PKCS5Padding
.do not print a byte array directly. Java will output only printable characters. Always encode and decode a byte array when printing (Hex or Base64 are the most common encodings)
Here is an example project
Base64.getEncoder().encodeToString(byteArray)
- I hope you are aware DES is considered a weak cipher today and should be used only for backward compatibility.
add a comment |
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, k);
byte data = input.getBytes();
byte result = cipher.doFinal(data);
Using
DES
without IV you are implicitly usingDES/ECB/PKCS5Padding
.do not print a byte array directly. Java will output only printable characters. Always encode and decode a byte array when printing (Hex or Base64 are the most common encodings)
Here is an example project
Base64.getEncoder().encodeToString(byteArray)
- I hope you are aware DES is considered a weak cipher today and should be used only for backward compatibility.
add a comment |
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, k);
byte data = input.getBytes();
byte result = cipher.doFinal(data);
Using
DES
without IV you are implicitly usingDES/ECB/PKCS5Padding
.do not print a byte array directly. Java will output only printable characters. Always encode and decode a byte array when printing (Hex or Base64 are the most common encodings)
Here is an example project
Base64.getEncoder().encodeToString(byteArray)
- I hope you are aware DES is considered a weak cipher today and should be used only for backward compatibility.
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, k);
byte data = input.getBytes();
byte result = cipher.doFinal(data);
Using
DES
without IV you are implicitly usingDES/ECB/PKCS5Padding
.do not print a byte array directly. Java will output only printable characters. Always encode and decode a byte array when printing (Hex or Base64 are the most common encodings)
Here is an example project
Base64.getEncoder().encodeToString(byteArray)
- I hope you are aware DES is considered a weak cipher today and should be used only for backward compatibility.
answered Nov 12 '18 at 1:21
gusto2gusto2
4,8232920
4,8232920
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53254779%2finput-length-must-be-multiple-of-8-when-decrypting-with-padded-cipher%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown