Hm.. Saya pikir ada sesuatu yang salah ketika dua nilai digabungkan. Hashing harus benar-benar menggunakan array byte, seperti dengan versi enkripsi , tapi sayangnya CF9 hash() fungsi tidak mendukungnya - hanya string. (Meskipun didokumentasikan dengan buruk, ini didukung di CF11). Saya tidak yakin apakah ada solusi CF murni untuk CF9. Namun, sementara itu Anda dapat menggunakan java secara langsung:
<cfscript>
thePassword = "[email protected]";
base64Salt = "+muo6gAmjvvyy5doTdjyaA==";
// extract bytes of the salt and password
saltBytes = binaryDecode(base64Salt, "base64");
passBytes = charsetDecode(thePassword, "UTF-16LE" );
// next combine the bytes. note, the returned arrays are immutable,
// so we cannot use the standard CF tricks to merge them
ArrayUtils = createObject("java", "org.apache.commons.lang.ArrayUtils");
dataBytes = ArrayUtils.addAll( saltBytes, passBytes );
// hash binary using java
MessageDigest = createObject("java", "java.security.MessageDigest").getInstance("SHA-1");
MessageDigest.update(dataBytes);
theBase64Hash = binaryEncode(MessageDigest.digest(), "base64");
WriteOutput("<br />theBase64Hash= "& theBase64Hash &"<br/>");
WriteOutput("DBPassword= nfcqQBgeAm0Dp1oGZI0O70Y6DvA= <br />");
</cfscript>
Pembaruan:
Setelah melihat-lihat lebih jauh, saya tidak berpikir ada solusi CF murni. Pengkodean UTF-16LE hanyalah sebagian dari masalah. Masalah lainnya adalah DNN mendekode setiap string secara terpisah , yang mungkin menghasilkan byte yang berbeda dari saat keduanya didekodekan sebagai tunggal string (lihat perbandingan di bawah). Itu berlaku dalam kasus kata sandi kedua Anda, itulah sebabnya hash terakhir berbeda. Sejak hash
tidak akan menerima array byte, saya tidak berpikir itu adalah alat yang tepat untuk pekerjaan ini. MessageDigest
adalah cara untuk pergi.
Perbandingan Array Byte
old| new |
1 | -6 | -6 |
2 | 107 | 107 |
3 | -88 | -88 |
4 | -22 | -22 |
5 | 0 | 0 |
6 | 38 | 38 |
7 | -114 | -114 |
8 | -5 | -5 |
9 | -14 | -14 |
10 | -53 | -53 |
11 | -105 | -105 |
12 | 104 | 104 |
13 | -3 | 77 | **
14 | -1 | -40 | **
15 | 68 | -14 | **
16 | 0 | 104 | **
17 | 84 | 68 | **
18 | 0 | 0 |
19 | 33 | 84 | **
20 | 0 | 0 |
21 | 64 | 33 | **
22 | 0 | 0 |
23 | 49 | 64 | **
24 | 0 | 0 |
25 | 50 | 49 | **
26 | 0 | 0 |
27 | | 50 | **
28 | | 0 | **
- lama => charsetDecode(Garam &Kata Sandi, "UTF-16LE")
- baru => ArrayUtils.addAll( saltBytes, passBytes );