A Perl solution:
perl -pe 's/^( *- )(.+)/$1."X"x length($2)/e'
This uses `"X" x length($2)` to get the correct number of `X`s in the replacement.
Test input:
- Hello World
- Earth
This is not - censored
output:
- XXXXXXXXXXX
- XXXXX
This is not - censored