diff --git a/src/github.com/matrix-org/dendrite/mediaapi/storage/media_repository_table.go b/src/github.com/matrix-org/dendrite/mediaapi/storage/media_repository_table.go
index 31846cf48..c19a9d9b3 100644
--- a/src/github.com/matrix-org/dendrite/mediaapi/storage/media_repository_table.go
+++ b/src/github.com/matrix-org/dendrite/mediaapi/storage/media_repository_table.go
@@ -42,6 +42,8 @@ CREATE TABLE IF NOT EXISTS media_repository (
     creation_ts BIGINT NOT NULL,
     -- The file name with which the media was uploaded.
     upload_name TEXT NOT NULL,
+    -- A golang base64 URLEncoding string representation of a SHA-256 hash sum of the file data.
+    base64hash TEXT NOT NULL,
     -- The user who uploaded the file. Should be a Matrix user ID.
     user_id TEXT NOT NULL
 );
@@ -49,12 +51,12 @@ CREATE UNIQUE INDEX IF NOT EXISTS media_repository_index ON media_repository (me
 `
 
 const insertMediaSQL = `
-INSERT INTO media_repository (media_id, media_origin, content_type, content_disposition, content_length, creation_ts, upload_name, user_id)
-    VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
+INSERT INTO media_repository (media_id, media_origin, content_type, content_disposition, content_length, creation_ts, upload_name, base64hash, user_id)
+    VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)
 `
 
 const selectMediaSQL = `
-SELECT content_type, content_disposition, content_length, creation_ts, upload_name, user_id FROM media_repository WHERE media_id = $1 AND media_origin = $2
+SELECT content_type, content_disposition, content_length, creation_ts, upload_name, base64hash, user_id FROM media_repository WHERE media_id = $1 AND media_origin = $2
 `
 
 type mediaStatements struct {
@@ -84,6 +86,7 @@ func (s *mediaStatements) insertMedia(mediaMetadata *types.MediaMetadata) error
 		mediaMetadata.ContentLength,
 		mediaMetadata.CreationTimestamp,
 		mediaMetadata.UploadName,
+		mediaMetadata.Base64Hash,
 		mediaMetadata.UserID,
 	)
 	return err
@@ -102,6 +105,7 @@ func (s *mediaStatements) selectMedia(mediaID types.MediaID, mediaOrigin gomatri
 		&mediaMetadata.ContentLength,
 		&mediaMetadata.CreationTimestamp,
 		&mediaMetadata.UploadName,
+		&mediaMetadata.Base64Hash,
 		&mediaMetadata.UserID,
 	)
 	return &mediaMetadata, err
diff --git a/src/github.com/matrix-org/dendrite/mediaapi/types/types.go b/src/github.com/matrix-org/dendrite/mediaapi/types/types.go
index 0da5b1017..bef86adcc 100644
--- a/src/github.com/matrix-org/dendrite/mediaapi/types/types.go
+++ b/src/github.com/matrix-org/dendrite/mediaapi/types/types.go
@@ -32,6 +32,9 @@ type ContentType string
 // Filename is a string representing the name of a file
 type Filename string
 
+// Base64Hash is a base64 URLEncoding string representation of a SHA-256 hash sum
+type Base64Hash string
+
 // Path is an absolute or relative UNIX filesystem path
 type Path string
 
@@ -56,6 +59,7 @@ type MediaMetadata struct {
 	ContentLength      ContentLength
 	CreationTimestamp  UnixMs
 	UploadName         Filename
+	Base64Hash         Base64Hash
 	UserID             MatrixUserID
 }
 
diff --git a/src/github.com/matrix-org/dendrite/mediaapi/writers/download.go b/src/github.com/matrix-org/dendrite/mediaapi/writers/download.go
index 58c9b3adc..4dec2452b 100644
--- a/src/github.com/matrix-org/dendrite/mediaapi/writers/download.go
+++ b/src/github.com/matrix-org/dendrite/mediaapi/writers/download.go
@@ -332,6 +332,7 @@ func (r *downloadRequest) commitFileAndMetadata(tmpDir types.Path, absBasePath t
 	r.Logger.WithFields(log.Fields{
 		"MediaID":             r.MediaMetadata.MediaID,
 		"Origin":              r.MediaMetadata.Origin,
+		"Base64Hash":          r.MediaMetadata.Base64Hash,
 		"UploadName":          r.MediaMetadata.UploadName,
 		"Content-Length":      r.MediaMetadata.ContentLength,
 		"Content-Type":        r.MediaMetadata.ContentType,
@@ -483,6 +484,7 @@ func (r *downloadRequest) respondFromRemoteFile(w http.ResponseWriter, absBasePa
 	// request's response. bytesWritten is therefore used as it is what would be sent to clients when reading from the local
 	// file.
 	r.MediaMetadata.ContentLength = types.ContentLength(bytesWritten)
+	r.MediaMetadata.Base64Hash = hash
 	r.MediaMetadata.UserID = types.MatrixUserID("@:" + string(r.MediaMetadata.Origin))
 
 	updateActiveRemoteRequests = r.commitFileAndMetadata(tmpDir, absBasePath, activeRemoteRequests, db, mxcURL)
diff --git a/src/github.com/matrix-org/dendrite/mediaapi/writers/upload.go b/src/github.com/matrix-org/dendrite/mediaapi/writers/upload.go
index dc886353f..92a80f2e2 100644
--- a/src/github.com/matrix-org/dendrite/mediaapi/writers/upload.go
+++ b/src/github.com/matrix-org/dendrite/mediaapi/writers/upload.go
@@ -220,11 +220,13 @@ func Upload(req *http.Request, cfg *config.MediaAPI, db *storage.Database) util.
 	}
 
 	r.MediaMetadata.ContentLength = bytesWritten
+	r.MediaMetadata.Base64Hash = hash
 	r.MediaMetadata.MediaID = types.MediaID(hash)
 
 	logger.WithFields(log.Fields{
 		"MediaID":             r.MediaMetadata.MediaID,
 		"Origin":              r.MediaMetadata.Origin,
+		"Base64Hash":          r.MediaMetadata.Base64Hash,
 		"UploadName":          r.MediaMetadata.UploadName,
 		"Content-Length":      r.MediaMetadata.ContentLength,
 		"Content-Type":        r.MediaMetadata.ContentType,