Pem

The encoding specified by RFC 1421 section 4.3.2.4, Base64 Content-Transfer-Encoding.

Uses the encoding alphabet as specified in Table 1 of RFC 1421 for encoding and decoding, consisting of 'A'..'Z', 'a'..'z', '+' and '/' characters.

This instance is configured with the padding option set to PaddingOption.PRESENT. Use the withPadding function to create a new instance with a different padding option if necessary.

Encode operation adds CRLF every 64 symbols. No line separator is added to the end of the encoded output. Decode operation ignores all line separators and other characters outside the base64 alphabet.

Since Kotlin

2.2

Samples

import kotlin.io.encoding.*
import kotlin.test.*

fun main() { 
   //sampleStart 
   val encoded = Base64.Pem.encode("Hello? :> ".encodeToByteArray())
println(encoded) // SGVsbG8/IDo+IA==

// Mime encoding ignores all characters not belonging to its alphabet
val decoded = Base64.Pem.decode("Y@{mFz!Z!TY}0")
println(decoded.decodeToString()) // base64

// let's encode some long text
val sourceText = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, " +
        "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. " +
        "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris " +
        "nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in " +
        "reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla " +
        "pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa" +
        " qui officia deserunt mollit anim id est laborum."

val encodedText = Base64.Pem.encode(sourceText.encodeToByteArray())
println(encodedText)

val encodedLines = encodedText.lines()
println("${encodedLines.count()} lines, at most ${encodedLines.maxOf { it.length }} characters each") // 10 lines, at most 64 characters each

println("sourceText == Base64.Pem.decode(encodedText).decodeToString() is ${sourceText == Base64.Pem.decode(encodedText).decodeToString()}") // true 
   //sampleEnd
}