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;
}







1















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.










share|improve this question

























  • please see here

    – xerx593
    Feb 6 at 12:57


















1















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.










share|improve this question

























  • please see here

    – xerx593
    Feb 6 at 12:57














1












1








1








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.










share|improve this question
















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






share|improve this question















share|improve this question













share|improve this question




share|improve this question








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



















  • 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












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
});


}
});














draft saved

draft discarded


















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
















draft saved

draft discarded




















































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.




draft saved


draft discarded














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





















































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







這個網誌中的熱門文章

Xamarin.form Move up view when keyboard appear

Post-Redirect-Get with Spring WebFlux and Thymeleaf

Anylogic : not able to use stopDelay()