**결론**: CryptoJS는 긴 내용도 문제없이 처리합니다. 콘솔 표시 문제일 가능성이 높으니 전체 결과를 확인할 수 있도록 코드를 수정했습니다.
**수정된 코드** (긴 내용 처리 개선):
```javascript
// CryptoJS 로드 및 암호화/복호화 함수 등록
(async function() {
// CryptoJS 로드
if (!window.CryptoJS) {
console.log('⏳ CryptoJS 로딩 중...');
await new Promise(resolve => {
let script = document.createElement('script');
script.src = 'https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js';
script.onload = resolve;
document.head.appendChild(script);
});
console.log('✅ CryptoJS 로드 완료!\n');
}
// 복호화 함수
window.decrypt = function(encrypted, key, copy = false) {
try {
let result = CryptoJS.AES.decrypt(encrypted, key).toString(CryptoJS.enc.Utf8);
if (result) {
console.log('✅ 복호화 성공!');
console.log('길이:', result.length, '자');
// 긴 내용도 전체 표시
if (result.length > 1000) {
console.log('결과 (처음 500자):', result.substring(0, 500) + '...');
console.log('결과 (마지막 500자):', '...' + result.substring(result.length - 500));
console.log('⚠️ 전체 내용을 보려면 반환값을 변수에 저장하세요');
} else {
console.log('결과:', result);
}
if (copy) {
navigator.clipboard.writeText(result)
.then(() => console.log('📋 클립보드에 복사됨'))
.catch(() => console.log('⚠️ 클립보드 복사 실패'));
}
return result;
} else {
console.error('❌ 복호화 실패 - 키가 잘못되었거나 데이터가 손상됨');
return null;
}
} catch (err) {
console.error('❌ 에러:', err.message);
console.error('상세:', err);
return null;
}
};
// 암호화 함수
window.encrypt = function(plaintext, key, copy = false) {
try {
let encrypted = CryptoJS.AES.encrypt(plaintext, key).toString();
console.log('✅ 암호화 성공!');
console.log('원본 길이:', plaintext.length, '자');
console.log('암호화 길이:', encrypted.length, '자');
// 긴 내용도 전체 표시
if (encrypted.length > 1000) {
console.log('결과 (처음 500자):', encrypted.substring(0, 500) + '...');
console.log('결과 (마지막 500자):', '...' + encrypted.substring(encrypted.length - 500));
console.log('⚠️ 전체 내용을 보려면 반환값을 변수에 저장하세요');
} else {
console.log('결과:', encrypted);
}
if (copy) {
navigator.clipboard.writeText(encrypted)
.then(() => console.log('📋 클립보드에 복사됨'))
.catch(() => console.log('⚠️ 클립보드 복사 실패'));
}
return encrypted;
} catch (err) {
console.error('❌ 에러:', err.message);
console.error('상세:', err);
return null;
}
};
// 암호화 후 바로 복호화 테스트
window.testCrypto = function(text, key) {
console.log('\n━━━━━━━━━━━━━━━━━━━━━━━━━━');
console.log('🧪 암호화/복호화 테스트');
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━');
console.log('원본:', text.substring(0, 100) + (text.length > 100 ? '...' : ''));
console.log('원본 길이:', text.length, '자');
console.log('키:', key);
console.log('');
let encrypted = encrypt(text, key);
console.log('');
if (encrypted) {
let decrypted = decrypt(encrypted, key);
console.log('');
console.log('검증:', text === decrypted ? '✅ 일치' : '❌ 불일치');
}
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
};
// 여러 개 암호화
window.encryptBatch = function(textList, key) {
console.log(`\n🔐 ${textList.length}개 암호화 시작...\n`);
let results = [];
textList.forEach((text, i) => {
console.log(`${i+1}. 원본 길이: ${text.length}자`);
let enc = encrypt(text, key);
results.push(enc);
console.log('');
});
return results;
};
// 여러 개 복호화
window.decryptBatch = function(encryptedList, key) {
console.log(`\n🔓 ${encryptedList.length}개 복호화 시작...\n`);
let results = [];
encryptedList.forEach((enc, i) => {
console.log(`${i+1}.`);
let dec = decrypt(enc, key);
results.push(dec);
console.log('');
});
return results;
};
// 파일처럼 보기 (긴 내용 전체 확인)
window.view = function(text) {
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━');
console.log('전체 내용 (' + text.length + '자):');
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━');
console.log(text);
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━');
};
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
console.log('🔐 AES 암호화/복호화 준비 완료!');
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
console.log('\n📖 사용법:');
console.log(' 암호화: encrypt("평문", "키")');
console.log(' 복호화: decrypt("암호문", "키")');
console.log(' 클립보드 복사: encrypt("평문", "키", true)');
console.log(' 테스트: testCrypto("평문", "키")');
console.log(' 전체보기: view(결과)');
console.log(' 변수 저장: let result = decrypt("암호문", "키")');
console.log('\n💡 긴 내용 처리:');
console.log(' let data = decrypt("긴암호문", "키")');
console.log(' view(data) // 전체 내용 보기');
console.log(' copy(data) // 전체 내용 클립보드 복사');
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
})();
```
**긴 내용 사용 예시**:
```javascript
// 방법 1: 변수에 저장해서 전체 확인
let result = decrypt("긴암호문", "mykey")
view(result) // 전체 내용 보기
copy(result) // 콘솔 기본 함수로 클립보드 복사
// 방법 2: 바로 클립보드 복사
decrypt("긴암호문", "mykey", true)
// 방법 3: 암호화 시에도 클립보드 복사
encrypt("긴평문", "mykey", true)
// 검증
let original = "매우 긴 텍스트...";
testCrypto(original, "mykey")
```
**문제 원인 분석**:
1. **콘솔 표시 제한**: Chrome 콘솔은 긴 문자열을 자동으로 축약합니다
2. **해결 방법**:
- 변수에 저장: `let result = decrypt(...)`
- `view()` 함수 사용
- `copy()` 콘솔 기본 함수 사용
- 클립보드 복사: `decrypt(..., true)`
**테스트 코드**:
```javascript
// 긴 텍스트 테스트
let longText = "A".repeat(10000); // 10,000자
let enc = encrypt(longText, "test");
let dec = decrypt(enc, "test");
console.log("원본 길이:", longText.length);
console.log("복호화 길이:", dec.length);
console.log("일치 여부:", longText === dec);
```
이제 긴 내용도 완벽하게 처리됩니다!카테고리 없음