Androidでデータ検証を行おうとしていますが、
次のように、ローカル マシン上のディレクトリの sha-1 を計算しています。
def getLocalFoldersChecksum(directory):
directory = '/.../test-assets/testoswalk'
SHAhash = hashlib.sha1()
print SHAhash.hexdigest()
if not os.path.exists (directory):
return -1
try:
for root, dirs, files in os.walk(directory):
for names in files:
filepath = os.path.join(root,names)
try:
f1 = open(filepath, 'rb')
except:
# You can't open the file for some reason
f1.close()
continue
SHAhash.update(hashlib.sha1(f1.read()).hexdigest())
f1.close()
except:
return -1
return SHAhash.hexdigest()
次のように、Android デバイスのディレクトリの Sha-1 を (Busybox を使用して) 取得しています。
BUSY_BOX = "/data/local/tmp/busybox"
def getDeviceFoldersChecksum(directory):
cmd = BUSY_BOX + ' find /mnt/sdcard/testoswalk -type f -exec ' + BUSY_BOX +
' sha1sum {} \; | ' + BUSY_BOX + ' sort | ' + BUSY_BOX + ' sha1sum '
checksum = device.shell(cmd)
return checksum
しかし、これら 2 つの関数によって返される値は一致しません。
同様に、Android とローカル マシンのファイルの Sha-1 を確認しようとしましたが、完全に動作します。
def getFilesChecksum():
ck1 = hashlib.sha1(open('/.../test-assets/testoswalk/abc.xml').read()).hexdigest()
cmd = BUSY_BOX + ' sha1sum /mnt/sdcard/testoswalk/abc.xml'
ck2 = device.shell(cmd)
ck2 = ck2.split(' ')[0]
if(ck1 == ck2):
return True
return False
ファイルがディレクトリ内で順序付けられ、Sha-1 によって消費される方法に問題があると確信しています。さまざまな順列を試しましたが、うまくいきませんでした。助けてくれてありがとう。
解像度は次のとおりです。
次のように、adb シェルを使用して Android デバイスで SHA-1 を計算します。
$ rm -f SHA1SUMS
$ /data/local/tmp/busybox find /mnt/sdcard/testoswalk -type f -print0 | /data/local/tmp/busybox xargs -0 /data/local/tmp/busybox sha1sum >> SHA1SUMS
$ /data/local/tmp/busybox cut -c-40 SHA1SUMS | /data/local/tmp/busybox sha1sum
そして、次のように Python を使用してローカル マシンで SHA-1 を計算します。
def getLocalFoldersChecksum(directory):
directory = '/.../test'
SHAhash = hashlib.sha1()
print SHAhash.hexdigest()
try:
f = open('/.../test/SHA1SUMS','w')
except:
return -1
if not os.path.exists (directory):
return -1
try:
for root, dirs, files in os.walk(directory):
for names in files:
filepath = os.path.join(root,names)
try:
f1 = open(filepath, 'rb')
except:
# You can't open the file for some reason
f1.close()
continue
f.write(hashlib.sha1(f1.read()).hexdigest())
f.write('\n')
f1.close()
except:
return -1
f.close()
f = open('/.../test/SHA1SUMS','rb')
t = hashlib.sha1(f.read()).hexdigest()
f.close()
return t