Implement this key cipher
Python 3, 130 bytes
Thanks to @Rod for pointing out a bug
from random import*
def f(x):l=10**len(x);k=str(randint(0,l-1)+l)[1:];print(''.join(chr(ord(i)+int(j))for i,j in zip(x,k))+'\n'+k)
A function that takes input via argument as a string and prints to STDOUT.
How it works
from random import* Import everything from the random module
def f(x): Function with input string x
l=10**len(x) Define l for later use as 10^length(x)
randint(0,l-1)+l Generate a random integer in the range [0, l-1] and add l, giving a
number with l+1 digits...
k=str(...)[1:] ...convert to a string and remove the first character, giving a key of
length l that can include leading zeroes, and store in k
for i,j in zip(x,k) For each character pair i,j in x and k:
chr(ord(i)+int(j)) Find the UTF-8 code-point (same as ASCII for the ASCII characters),
add the relevant key digit and convert back to character
''.join(...) Concatenate the characters of the ciphertext
print(...+'\n'+k) Add newline and key, then print to STDOUT
Try it on Ideone
Jelly, 12 9 bytes
⁵ṁX€’Ṅ+OỌ
Try it online!
How it works
⁵ṁX€’Ṅ+OỌ Main link. Argument: s (string)
⁵ Set the return value to 10.
ṁ Mold; create an array of 10's with the length of s.
X€ Pseudo-randomly pick a integer between 1 and 10, for each 10.
’ Decrement, so the integers fall in the range [0, ..., 9].
Ṅ Print the key, as an array, followed by a linefeed.
+O Add the integers to the ordinals (code points) of s.
Ọ Unordinal; convert back to characters.
Pyth - 16 bytes
Waiting for decision by OP on the output formats.
sCM+VCMQKmOTQjkK
Test Suite.