ok vamos la
8c14f0db3df150123e6f3dbbf30f8b955a8249b62ac1d1ff16284aefa3d06d87 vira ���=�P>o=����Z�I�*���(J���m�
fff2525b8931402dd09222c50775608f75787bd2b87e56995a7bdd30f79702c4 vira ��R[�1@-В"�u`�ux{Ҹ~V�Z{�0���
concateno os 2 string: ���=�P>o=����Z�I�*���(J���m���R[�1@-В"�u`�ux{Ҹ~V�Z{�0���
o hash disso é: 204ee246463fecd48b2071a6512204cf952a006f8fc08bb61d0cbd8f53b063e0
mas o esperado seria ccdafb73d8dcd0173d5d5c3c9a0770d0b3953db889dab99ef05b1907518cb815
Não sei como você fez, como eu disse, não entendo de PHP, mas fiz aqui em python rapidinho:
a = '8c14f0db3df150123e6f3dbbf30f8b955a8249b62ac1d1ff16284aefa3d06d87'
b = 'fff2525b8931402dd09222c50775608f75787bd2b87e56995a7bdd30f79702c4'
#converte pra binario
a_bin = "".join([chr(int(a[i-2:i],16)) for i in xrange(len(a), 0, -2)])
b_bin = "".join([chr(int(b[i-2:i],16)) for i in xrange(len(b), 0, -2)])
result = sha256(sha256(a_bin+b_bin).digest()).hexdigest()
print result
o resultado deu "15b88c5107195bf09eb9da89b83d95b3d070079a3c5c5d3d17d0dcd873fbdacc", que é o que você esperava.
Ah sim, acabei de conferir. Sua entrada está invertida... você tem "
=?P>o=????Z?I?*
(J??m?" quando na verdade deveria ter "?mУ?J(
*?I?Z???=o>P?=???". O mesmo deve acontecer com a segunda entrada (não conferi).