Converting a BitSet to a byte[] with same representation
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}
I am working on generating a 64 bits keys for DES where only 20 bits are effective i.e. the rest is padded with zeros. The way I am trying to approach it is by having a BitSet
of 23 bits where every 8th is skipped (i.e. kept as false) and the rest is determined the SecureRandom.nextBoolean()
. So, the output of my BitSet is 23 bits where every 8th is false. The reason why I do this is to make sure that the parity bits are not a part of the 20 bits effective key.
Afterwards, I try to convert the BitSet
by using Bitset.toByteArray()
, which gives me 3 bytes and then I pad the rest 5 bytes with zeros. However, the problem occurs when I try to convert the BitSet
to a byte
as the representation is reversed.
public static byte generateDesKey() {
BitSet temp = new BitSet();
byte zeroByteKey = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
Random r = new SecureRandom();
for (int i = 0; i < 64; i++) {
if (i % 8 != 0 && i < 23) {
temp.set(i, r.nextBoolean());
}
}
StringBuilder sb = new StringBuilder();
for( int i = 0; i < temp.length(); i++ )
{
sb.append( temp.get( i ) == true ? 1: 0 );
}
System.out.println("Bitset " +sb );
byte tempByteKey = temp.toByteArray();
for (byte b : tempByteKey) {
System.out.print(Integer.toBinaryString(b & 255 | 256).substring(1));
}
for (int i = 0; i < tempByteKey.length; i++) {
zeroByteKey[i] = tempByteKey[i];
}
return zeroByteKey;
}
An example of output:
Bitset 00010100011110010011101 // 23 bits where parity bits are skipped
Converted BitSet to byte in binary 101101000000111001011100 // 24 bits where every 8 bits are reversed
The reason why, I assume, the second output is 24 bits is because 23 bits is rounded up to 3 bytes, when converted from BitSet
to byte
.
java arrays byte bitset
add a comment |
I am working on generating a 64 bits keys for DES where only 20 bits are effective i.e. the rest is padded with zeros. The way I am trying to approach it is by having a BitSet
of 23 bits where every 8th is skipped (i.e. kept as false) and the rest is determined the SecureRandom.nextBoolean()
. So, the output of my BitSet is 23 bits where every 8th is false. The reason why I do this is to make sure that the parity bits are not a part of the 20 bits effective key.
Afterwards, I try to convert the BitSet
by using Bitset.toByteArray()
, which gives me 3 bytes and then I pad the rest 5 bytes with zeros. However, the problem occurs when I try to convert the BitSet
to a byte
as the representation is reversed.
public static byte generateDesKey() {
BitSet temp = new BitSet();
byte zeroByteKey = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
Random r = new SecureRandom();
for (int i = 0; i < 64; i++) {
if (i % 8 != 0 && i < 23) {
temp.set(i, r.nextBoolean());
}
}
StringBuilder sb = new StringBuilder();
for( int i = 0; i < temp.length(); i++ )
{
sb.append( temp.get( i ) == true ? 1: 0 );
}
System.out.println("Bitset " +sb );
byte tempByteKey = temp.toByteArray();
for (byte b : tempByteKey) {
System.out.print(Integer.toBinaryString(b & 255 | 256).substring(1));
}
for (int i = 0; i < tempByteKey.length; i++) {
zeroByteKey[i] = tempByteKey[i];
}
return zeroByteKey;
}
An example of output:
Bitset 00010100011110010011101 // 23 bits where parity bits are skipped
Converted BitSet to byte in binary 101101000000111001011100 // 24 bits where every 8 bits are reversed
The reason why, I assume, the second output is 24 bits is because 23 bits is rounded up to 3 bytes, when converted from BitSet
to byte
.
java arrays byte bitset
please see here
– xerx593
Feb 6 at 12:57
add a comment |
I am working on generating a 64 bits keys for DES where only 20 bits are effective i.e. the rest is padded with zeros. The way I am trying to approach it is by having a BitSet
of 23 bits where every 8th is skipped (i.e. kept as false) and the rest is determined the SecureRandom.nextBoolean()
. So, the output of my BitSet is 23 bits where every 8th is false. The reason why I do this is to make sure that the parity bits are not a part of the 20 bits effective key.
Afterwards, I try to convert the BitSet
by using Bitset.toByteArray()
, which gives me 3 bytes and then I pad the rest 5 bytes with zeros. However, the problem occurs when I try to convert the BitSet
to a byte
as the representation is reversed.
public static byte generateDesKey() {
BitSet temp = new BitSet();
byte zeroByteKey = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
Random r = new SecureRandom();
for (int i = 0; i < 64; i++) {
if (i % 8 != 0 && i < 23) {
temp.set(i, r.nextBoolean());
}
}
StringBuilder sb = new StringBuilder();
for( int i = 0; i < temp.length(); i++ )
{
sb.append( temp.get( i ) == true ? 1: 0 );
}
System.out.println("Bitset " +sb );
byte tempByteKey = temp.toByteArray();
for (byte b : tempByteKey) {
System.out.print(Integer.toBinaryString(b & 255 | 256).substring(1));
}
for (int i = 0; i < tempByteKey.length; i++) {
zeroByteKey[i] = tempByteKey[i];
}
return zeroByteKey;
}
An example of output:
Bitset 00010100011110010011101 // 23 bits where parity bits are skipped
Converted BitSet to byte in binary 101101000000111001011100 // 24 bits where every 8 bits are reversed
The reason why, I assume, the second output is 24 bits is because 23 bits is rounded up to 3 bytes, when converted from BitSet
to byte
.
java arrays byte bitset
I am working on generating a 64 bits keys for DES where only 20 bits are effective i.e. the rest is padded with zeros. The way I am trying to approach it is by having a BitSet
of 23 bits where every 8th is skipped (i.e. kept as false) and the rest is determined the SecureRandom.nextBoolean()
. So, the output of my BitSet is 23 bits where every 8th is false. The reason why I do this is to make sure that the parity bits are not a part of the 20 bits effective key.
Afterwards, I try to convert the BitSet
by using Bitset.toByteArray()
, which gives me 3 bytes and then I pad the rest 5 bytes with zeros. However, the problem occurs when I try to convert the BitSet
to a byte
as the representation is reversed.
public static byte generateDesKey() {
BitSet temp = new BitSet();
byte zeroByteKey = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
Random r = new SecureRandom();
for (int i = 0; i < 64; i++) {
if (i % 8 != 0 && i < 23) {
temp.set(i, r.nextBoolean());
}
}
StringBuilder sb = new StringBuilder();
for( int i = 0; i < temp.length(); i++ )
{
sb.append( temp.get( i ) == true ? 1: 0 );
}
System.out.println("Bitset " +sb );
byte tempByteKey = temp.toByteArray();
for (byte b : tempByteKey) {
System.out.print(Integer.toBinaryString(b & 255 | 256).substring(1));
}
for (int i = 0; i < tempByteKey.length; i++) {
zeroByteKey[i] = tempByteKey[i];
}
return zeroByteKey;
}
An example of output:
Bitset 00010100011110010011101 // 23 bits where parity bits are skipped
Converted BitSet to byte in binary 101101000000111001011100 // 24 bits where every 8 bits are reversed
The reason why, I assume, the second output is 24 bits is because 23 bits is rounded up to 3 bytes, when converted from BitSet
to byte
.
java arrays byte bitset
java arrays byte bitset
edited Nov 23 '18 at 15:34
Bab
asked Nov 23 '18 at 14:37
BabBab
14810
14810
please see here
– xerx593
Feb 6 at 12:57
add a comment |
please see here
– xerx593
Feb 6 at 12:57
please see here
– xerx593
Feb 6 at 12:57
please see here
– xerx593
Feb 6 at 12:57
add a comment |
0
active
oldest
votes
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%2f53448650%2fconverting-a-bitset-to-a-byte-with-same-representation%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
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%2f53448650%2fconverting-a-bitset-to-a-byte-with-same-representation%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
please see here
– xerx593
Feb 6 at 12:57