diff --git a/lib/private/files/storage/wrapper/encryption.php b/lib/private/files/storage/wrapper/encryption.php
index 0b4816174bf0ffad11a41a7b4fbd9440d107d74c..81eea9944f89182b70bebd446077d3e61bb71b71 100644
--- a/lib/private/files/storage/wrapper/encryption.php
+++ b/lib/private/files/storage/wrapper/encryption.php
@@ -634,7 +634,18 @@ class Encryption extends Wrapper {
 			'encrypted' => (bool)$isEncrypted,
 		];
 		if($isEncrypted === 1) {
-			$cacheInformation['encryptedVersion'] = $sourceStorage->getCache()->get($sourceInternalPath)['encryptedVersion'];
+			$encryptedVersion = $sourceStorage->getCache()->get($sourceInternalPath)['encryptedVersion'];
+
+			// In case of a move operation from an unencrypted to an encrypted
+			// storage the old encrypted version would stay with "0" while the
+			// correct value would be "1". Thus we manually set the value to "1"
+			// for those cases.
+			// See also https://github.com/owncloud/core/issues/23078
+			if($encryptedVersion === 0) {
+				$encryptedVersion = 1;
+			}
+
+			$cacheInformation['encryptedVersion'] = $encryptedVersion;
 		}
 
 		// in case of a rename we need to manipulate the source cache because
diff --git a/tests/lib/files/storage/wrapper/encryption.php b/tests/lib/files/storage/wrapper/encryption.php
index b5ec15b12bf514740db871ace9e0c19515578ee4..bde920e440e6c42e9352e9e810a75b1e318ca389 100644
--- a/tests/lib/files/storage/wrapper/encryption.php
+++ b/tests/lib/files/storage/wrapper/encryption.php
@@ -672,6 +672,48 @@ class Encryption extends Storage {
 		];
 	}
 
+	public function testCopyBetweenStorageMinimumEncryptedVersion() {
+		$storage2 = $this->getMockBuilder('OCP\Files\Storage')
+			->disableOriginalConstructor()
+			->getMock();
+
+		$sourceInternalPath = $targetInternalPath = 'file.txt';
+		$preserveMtime = $isRename = false;
+
+		$storage2->expects($this->any())
+			->method('fopen')
+			->willReturnCallback(function($path, $mode) {
+				$temp = \OC::$server->getTempManager();
+				return fopen($temp->getTemporaryFile(), $mode);
+			});
+		$cache = $this->getMock('\OCP\Files\Cache\ICache');
+		$cache->expects($this->once())
+			->method('get')
+			->with($sourceInternalPath)
+			->willReturn(['encryptedVersion' => 0]);
+		$storage2->expects($this->once())
+			->method('getCache')
+			->willReturn($cache);
+		$this->encryptionManager->expects($this->any())
+			->method('isEnabled')
+			->willReturn(true);
+		global $mockedMountPointEncryptionEnabled;
+		$mockedMountPointEncryptionEnabled = true;
+
+		$expectedCachePut = [
+			'encrypted' => true,
+		];
+		$expectedCachePut['encryptedVersion'] = 1;
+
+		$this->cache->expects($this->once())
+			->method('put')
+			->with($sourceInternalPath, $expectedCachePut);
+
+		$this->invokePrivate($this->instance, 'copyBetweenStorage', [$storage2, $sourceInternalPath, $targetInternalPath, $preserveMtime, $isRename]);
+
+		$this->assertFalse(false);
+	}
+
 	/**
 	 * @dataProvider dataCopyBetweenStorage
 	 *