# Algorithm

Encrypting

1. Perform left circular shift the specified byte array every 8 bits. (num of shift: 0-7)
* Perform bit-invertion in case of the shifting position is 0.
2. Encode the bit-rotated byte array into a newly-allocated byte array using the Base64 encoding scheme.

Decrypting

Manipulate in the opposite way.

# Examples

Normal Base64

Source Text(ASCII) abc
Source octets 97 (0x61)98 (0x62)99 (0x63)
Bit pattern 01100001 01100010 01100011
Index 2422935
Base64-encoded YWJj
Encoded octets 89 (0x59)
01011001
87 (0x57)
01010111
74 (0x4A)
01001010
106 (0x6A)
01101010

BSB64 (n = 1)

Source Text(ASCII) abc
Source octets 97 (0x61)98 (0x62)99 (0x63)
Bit pattern 01100001 01100010 01100011
Bit rotation 11000010 11000100 11000110
Index 4844196
Base64-encoded wsTG
Encoded octets 119 (0x77)
01110111
115 (0x73)
01110011
84 (0x54)
01010100
71 (0x47)
01000111

BSB64 (n = 0)

Source Text(ASCII) abc
Source octets 97 (0x61)98 (0x62)99 (0x63)
Bit pattern 01100001 01100010 01100011
Bit invertion 10011110 10011101 10011100
Index39415428
Base64-encodednp2c
Encoded octets 110 (0x6E)
01101110
112 (0x70)
01110000
50 (0x32)
00110010
99 (0x63)
01100011

# Implementation

Java, JavaScript, Python, PowerShell, VBA implementations are available on GitHub.

Apache Maven

Maven Central
https://search.maven.org/artifact/com.bsb64/bsb64/1.0.0/jar

JAR direct download
bsb64-1.0.0.jar (3,827 bytes / Compiled with JDK8)
SHA-1: c0ba5ef3839f2ac944902b94b1082e41a9d26813
SHA-256: 4879ddf7e434e622e0c31bd8d72eb0b822dd4acc067fabf0a5648f69d785120f

# Notice

BSB64 is not intended to be used where secrecy is of any concern.
x
The Base 64 Alphabet IDX BIN ENC IDX BIN ENC IDX BIN ENC IDX BIN ENC 0 000000 A 16 010000 Q 32 100000 g 48 110000 w 1 000001 B 17 010001 R 33 100001 h 49 110001 x 2 000010 C 18 010010 S 34 100010 i 50 110010 y 3 000011 D 19 010011 T 35 100011 j 51 110011 z 4 000100 E 20 010100 U 36 100100 k 52 110100 0 5 000101 F 21 010101 V 37 100101 l 53 110101 1 6 000110 G 22 010110 W 38 100110 m 54 110110 2 7 000111 H 23 010111 X 39 100111 n 55 110111 3 8 001000 I 24 011000 Y 40 101000 o 56 111000 4 9 001001 J 25 011001 Z 41 101001 p 57 111001 5 10 001010 K 26 011010 a 42 101010 q 58 111010 6 11 001011 L 27 011011 b 43 101011 r 59 111011 7 12 001100 M 28 011100 c 44 101100 s 60 111100 8 13 001101 N 29 011101 d 45 101101 t 61 111101 9 14 001110 O 30 011110 e 46 101110 u 62 111110 + 15 001111 P 31 011111 f 47 101111 v 63 111111 / (pad) =