There are a couple of things to look out for. The first is that the files occupy a whole numbers of blocks and the block size is probably 4096 bytes. Therefore, a file that ls shows as having 1 byte will be seen by du as having 4096 bytes.
Also, du counts the number of blocks allocated to . and .. and any hidden file. Therefore, it would be better to compare du -b with ls -al.
However, this is based on the file-systems that I'm used to. YMMV.